C# 面向对象编程进阶:构造函数详解与访问修饰符应用

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 构造函数是一种特殊的方法,用于初始化对象。构造函数的优势在于,在创建类的对象时调用它。它可以用于为字段设置初始值

C# 构造函数

构造函数是一种特殊的方法,用于初始化对象。构造函数的优势在于,在创建类的对象时调用它。它可以用于为字段设置初始值:

示例 获取您自己的 C# 服务器

创建一个构造函数:

// 创建一个 Car 类
class Car
{
   
  public string model;  // 创建一个字段

  // 为 Car 类创建一个类构造函数
  public Car()
  {
   
    model = "Mustang"; // 为 model 设置初始值
  }

  static void Main(string[] args)
  {
   
    Car Ford = new Car();  // 创建一个 Car 类的对象(这将调用构造函数)
    Console.WriteLine(Ford.model);  // 打印 model 的值
  }
}

输出 "Mustang"

请注意,构造函数的名称必须与类名匹配,并且不能有返回类型(如 voidint)。

还请注意,构造函数在创建对象时调用。

所有类默认都有构造函数:如果您自己不创建类构造函数,C# 会为您创建一个。然而,这样您就无法为字段设置初始值。

构造函数参数

构造函数还可以接受参数,用于初始化字段。

下面的示例在构造函数中添加了一个字符串 modelName 参数。在构造函数内部,我们将 model 设置为 modelName(model=modelName)。当我们调用构造函数时,将参数传递给构造函数("Mustang"),这将将 model 的值设置为 "Mustang":

示例

class Car
{
   
  public string model;

  // 创建带有参数的类构造函数
  public Car(string modelName)
  {
   
    model = modelName;
  }

  static void Main(string[] args)
  {
   
    Car Ford = new Car("Mustang");
    Console.WriteLine(Ford.model);
  }
}

输出 "Mustang"

您可以拥有任意数量的参数:

示例

class Car
{
   
  public string model;
  public string color;
  public int year;

  // 创建带有多个参数的类构造函数
  public Car(string modelName, string modelColor, int modelYear)
  {
   
    model = modelName;
    color = modelColor;
    year = modelYear;
  }

  static void Main(string[] args)
  {
   
    Car Ford = new Car("Mustang", "Red", 1969);
    Console.WriteLine(Ford.color + " " + Ford.year + " " + Ford.model);
  }
}

输出 Red 1969 Mustang

提示:与其他方法一样,构造函数可以通过使用不同数量的参数进行重载。

构造函数节省时间

没有构造函数:

class Program
{
   
  static void Main(string[] args)
  {
   
    Car Ford = new Car();
    Ford.model = "Mustang";
    Ford.color = "red";
    Ford.year = 1969;

    Car Opel = new Car();
    Opel.model = "Astra";
    Opel.color = "white";
    Opel.year = 2005;

    Console.WriteLine(Ford.model);
    Console.WriteLine(Opel.model);
  }
}

有构造函数:

class Program
{
   
  static void Main(string[] args)
  {
   
    Car Ford = new Car("Mustang", "Red", 1969);
    Car Opel = new Car("Astra", "White", 2005);

    Console.WriteLine(Ford.model);
    Console.WriteLine(Opel.model);
  }
}

C# 访问修饰符

到目前为止,您已经很熟悉我们许多示例中出现的 public 关键字:

public string color;

public 关键字是一个访问修饰符,用于设置类、字段、方法和属性的访问级别/可见性。

C# 具有以下访问修饰符:

修饰符 描述
public 代码可供所有类访问
private 代码只能在同一类中访问
protected 代码可以在同一类中访问,或在从该类继承的类中访问
internal 代码只能在其自己的程序集中访问,但不能从另一个程序集中访问

还有两种组合:protected internalprivate protected

现在,让我们重点关注 publicprivate 修饰符。

private 修饰符

如果您使用 private 访问修饰符声明一个字段,则它只能在同一类中访问:

示例

class Car
{
   
  private string model = "Mustang";

  static void Main(string[] args)
  {
   
    Car myObj = new Car();
    Console.WriteLine(myObj.model);
  }
}

输出将是:

Mustang

如果您尝试在类外部访问它,将会发生错误:

示例

class Car
{
   
  private string model = "Mustang";
}

class Program
{
   
  static void Main(string[] args)
  {
   
    Car myObj = new Car();
    Console.WriteLine(myObj.model);
  }
}

输出将是:

'Car.model' 由于其保护级别而无法访问
字段“Car.model”已分配,但其值从未使用过

public 修饰符

如果您使用 public 访问修饰符声明一个字段,则它对所有类都可访问:

示例

class Car
{
   
  public string model = "Mustang";
}

class Program
{
   
  static void Main(string[] args)
  {
   
    Car myObj = new Car();
    Console.WriteLine(myObj.model);
  }
}

输出将是:

Mustang

为什么要使用访问修饰符?

  • 控制类成员的可见性(每个单独的类和类成员的安全级别)。
  • 实现“封装”——这是一个确保对用户隐藏“敏感”数据的过程。这是通过将字段声明为 private 来完成的

如果您不指定访问修饰符,默认情况下,类的所有成员都是 private

示例

class Car
{
   
  string model;  // private
  string year;   // private
}

C# 属性(Get 和 Set)

在开始解释属性之前,您应该对“封装”有一个基本的了解。

封装的含义是确保对用户隐藏“敏感”数据。要实现这一点,您必须:

  • 将字段/变量声明为 private
  • 通过属性提供 public getset 方法来访问和更新 private 字段的值

属性

private 变量只能在同一类中访问(外部类无法访问它)。但是,有时我们需要访问它们 - 这可以通过属性来完成。

属性就像是变量和方法的结合,它有两个方法:get 方法和 set 方法:

示例

class Person
{
   
  private string name; // 字段

  public string Name   // 属性
  {
   
    get {
    return name; }   // get 方法
    set {
    name = value; }  // set 方法
  }
}

示例解释

  • Name 属性与 name 字段相关联。通常的做法是属性和 private 字段使用相同的名称,但首字母大写。
  • get 方法返回 name 变量的值。
  • set 方法将一个值赋给 name 变量。value 关键字表示我们赋给属性的值。

使用属性

现在我们可以使用 Name 属性来访问和更新 Person 类的 private 字段:

示例

class Person
{
   
  private string name; // 字段
  public string Name   // 属性
  {
   
    get {
    return name; }
    set {
    name = value; }
  }
}

class Program
{
   
  static void Main(string[] args)
  {
   
    Person myObj = new Person();
    myObj.Name = "Liam";
    Console.WriteLine(myObj.Name);
  }
}

输出

Liam

自动属性(简写)

C# 还提供了一种使用简写/自动属性的方法,您无需为属性定义字段,只需在属性中编写 get;set;

以下示例将产生与上述示例相同的结果。唯一的区别是代码更少:

示例

class Person
{
   
  public string Name  // 属性
  {
    get; set; }
}

为什么要封装?

  • 更好地控制类成员(减少自己或他人搞乱代码的可能性)
  • 字段可以设为只读(如果只使用 get 方法),或只写(如果只使用 set 方法)
  • 灵活:程序员可以更改代码的一部分而不影响其他部分
  • 提高数据安全性

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎 点赞、收藏、关注

相关文章
|
1月前
|
C#
C# DataTable不能通过已删除的行访问该行的信息
C# DataTable不能通过已删除的行访问该行的信息
|
1月前
|
Java C#
C# 面向对象编程解析:优势、类和对象、类成员详解
OOP代表面向对象编程。 过程式编程涉及编写执行数据操作的过程或方法,而面向对象编程涉及创建包含数据和方法的对象。 面向对象编程相对于过程式编程具有几个优势: OOP执行速度更快,更容易执行 OOP为程序提供了清晰的结构 OOP有助于保持C#代码DRY("不要重复自己"),并使代码更易于维护、修改和调试 OOP使得能够创建完全可重用的应用程序,编写更少的代码并减少开发时间 提示:"不要重复自己"(DRY)原则是有关减少代码重复的原则。应该提取出应用程序中常见的代码,并将其放置在单一位置并重复使用,而不是重复编写。
59 0
|
17天前
|
C#
C#||应用框体设计计算器
C#||应用框体设计计算器
|
13天前
|
开发框架 前端开发 .NET
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
集成于VS 2019,EXT.NET前端和ASP.NET后端,搭配MSSQL 2018数据库。系统覆盖样品管理、数据分析、报表和项目管理等实验室全流程。应用广泛,包括生产质检(如石化、制药)、环保监测、试验研究等领域。随着技术发展,现代LIMS还融合了临床、电子实验室笔记本和SaaS等功能,以满足复杂多样的实验室管理需求。
24 3
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
|
1月前
|
存储 运维 BI
基于C#-VC-MSSQL开发的全套PACS系统源码 3D PACS系统源码:可实现医学影像获取、存档、观片、处理、打印多项应用
PACS的功能价值在于通过连接不同的影像设备,存储与管理图像,图像的调用与后处理,实现资源共享,降低成本,达到提高工作效率、提升医疗水平的目地;
30 1
基于C#-VC-MSSQL开发的全套PACS系统源码  3D PACS系统源码:可实现医学影像获取、存档、观片、处理、打印多项应用
|
1月前
|
存储 监控 C#
在上网行为管理软件中实现C#的跨平台应用
本文介绍了使用C#实现跨平台上网行为管理应用的方法。首先,通过.NET Core SDK创建多操作系统兼容的开发环境。接着,利用HttpClient捕获和记录HTTP请求,示例代码展示了如何捕获请求URL。然后,使用SQLite存储网络行为数据,并提供了创建数据库和插入数据的代码。此外,还讨论了如何跨平台编译应用程序以及如何自动将数据提交到远程服务器。通过这些步骤,可以构建一个能在不同操作系统上运行的上网行为管理系统。
124 3
|
1月前
|
存储 数据采集 API
C# GetField 方法应用实例
C# GetField 方法应用实例
|
1月前
|
JSON 安全 API
C# GetMethod 方法应用实例
C# GetMethod 方法应用实例
|
1月前
|
程序员 C#
C#编程中的面向对象编程思想
【4月更文挑战第21天】本文探讨了C#中的面向对象编程,包括类、对象、封装、继承和多态。类是对象的抽象,定义属性和行为;对象是类的实例。封装隐藏内部细节,只暴露必要接口。继承允许类复用和扩展属性与行为,而多态使不同类的对象能通过相同接口调用方法。C#通过访问修饰符实现封装,使用虚方法和抽象方法实现多态。理解并应用这些概念,能提升代码的清晰度和可扩展性,助你成为更好的C#程序员。
|
1月前
|
JavaScript 前端开发 C#
C# webbrowser控件设置代理IP访问网站
C# webbrowser控件设置代理IP访问网站
210 5

热门文章

最新文章