翼度科技»论坛 编程开发 .net 查看内容

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

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
C# 构造函数

构造函数是一种特殊的方法,用于初始化对象。构造函数的优势在于,在创建类的对象时调用它。它可以用于为字段设置初始值:
示例 获取您自己的 C# 服务器

创建一个构造函数:
  1. // 创建一个 Car 类
  2. class Car
  3. {
  4.   public string model;  // 创建一个字段
  5.   // 为 Car 类创建一个类构造函数
  6.   public Car()
  7.   {
  8.     model = "Mustang"; // 为 model 设置初始值
  9.   }
  10.   static void Main(string[] args)
  11.   {
  12.     Car Ford = new Car();  // 创建一个 Car 类的对象(这将调用构造函数)
  13.     Console.WriteLine(Ford.model);  // 打印 model 的值
  14.   }
  15. }
复制代码
输出 "Mustang"
请注意,构造函数的名称必须与类名匹配,并且不能有返回类型(如 void 或 int)。
还请注意,构造函数在创建对象时调用。
所有类默认都有构造函数:如果您自己不创建类构造函数,C# 会为您创建一个。然而,这样您就无法为字段设置初始值。
构造函数参数

构造函数还可以接受参数,用于初始化字段。
下面的示例在构造函数中添加了一个字符串 modelName 参数。在构造函数内部,我们将 model 设置为 modelName(model=modelName)。当我们调用构造函数时,将参数传递给构造函数("Mustang"),这将将 model 的值设置为 "Mustang":
示例
  1. class Car
  2. {
  3.   public string model;
  4.   // 创建带有参数的类构造函数
  5.   public Car(string modelName)
  6.   {
  7.     model = modelName;
  8.   }
  9.   static void Main(string[] args)
  10.   {
  11.     Car Ford = new Car("Mustang");
  12.     Console.WriteLine(Ford.model);
  13.   }
  14. }
复制代码
输出 "Mustang"
您可以拥有任意数量的参数:
示例
  1. class Car
  2. {
  3.   public string model;
  4.   public string color;
  5.   public int year;
  6.   // 创建带有多个参数的类构造函数
  7.   public Car(string modelName, string modelColor, int modelYear)
  8.   {
  9.     model = modelName;
  10.     color = modelColor;
  11.     year = modelYear;
  12.   }
  13.   static void Main(string[] args)
  14.   {
  15.     Car Ford = new Car("Mustang", "Red", 1969);
  16.     Console.WriteLine(Ford.color + " " + Ford.year + " " + Ford.model);
  17.   }
  18. }
复制代码
输出 Red 1969 Mustang
提示:与其他方法一样,构造函数可以通过使用不同数量的参数进行重载。
构造函数节省时间

没有构造函数:
  1. class Program
  2. {
  3.   static void Main(string[] args)
  4.   {
  5.     Car Ford = new Car();
  6.     Ford.model = "Mustang";
  7.     Ford.color = "red";
  8.     Ford.year = 1969;
  9.     Car Opel = new Car();
  10.     Opel.model = "Astra";
  11.     Opel.color = "white";
  12.     Opel.year = 2005;
  13.     Console.WriteLine(Ford.model);
  14.     Console.WriteLine(Opel.model);
  15.   }
  16. }
复制代码
有构造函数:
  1. class Program
  2. {
  3.   static void Main(string[] args)
  4.   {
  5.     Car Ford = new Car("Mustang", "Red", 1969);
  6.     Car Opel = new Car("Astra", "White", 2005);
  7.     Console.WriteLine(Ford.model);
  8.     Console.WriteLine(Opel.model);
  9.   }
  10. }
复制代码
C# 访问修饰符

到目前为止,您已经很熟悉我们许多示例中出现的 public 关键字:
  1. public string color;
复制代码
public 关键字是一个访问修饰符,用于设置类、字段、方法和属性的访问级别/可见性。
C# 具有以下访问修饰符:
修饰符描述public代码可供所有类访问private代码只能在同一类中访问protected代码可以在同一类中访问,或在从该类继承的类中访问internal代码只能在其自己的程序集中访问,但不能从另一个程序集中访问还有两种组合:protected internal 和 private protected。
现在,让我们重点关注 public 和 private 修饰符。
private 修饰符

如果您使用 private 访问修饰符声明一个字段,则它只能在同一类中访问:
示例
  1. class Car
  2. {
  3.   private string model = "Mustang";
  4.   static void Main(string[] args)
  5.   {
  6.     Car myObj = new Car();
  7.     Console.WriteLine(myObj.model);
  8.   }
  9. }
复制代码
输出将是:
  1. Mustang
复制代码
如果您尝试在类外部访问它,将会发生错误:
示例
  1. class Car
  2. {
  3.   private string model = "Mustang";
  4. }
  5. class Program
  6. {
  7.   static void Main(string[] args)
  8.   {
  9.     Car myObj = new Car();
  10.     Console.WriteLine(myObj.model);
  11.   }
  12. }
复制代码
输出将是:
  1. 'Car.model' 由于其保护级别而无法访问
  2. 字段“Car.model”已分配,但其值从未使用过
复制代码
public 修饰符

如果您使用 public 访问修饰符声明一个字段,则它对所有类都可访问:
示例
  1. class Car
  2. {
  3.   public string model = "Mustang";
  4. }
  5. class Program
  6. {
  7.   static void Main(string[] args)
  8.   {
  9.     Car myObj = new Car();
  10.     Console.WriteLine(myObj.model);
  11.   }
  12. }
复制代码
输出将是:
  1. Mustang
复制代码
为什么要使用访问修饰符?


  • 控制类成员的可见性(每个单独的类和类成员的安全级别)。
  • 实现“封装”——这是一个确保对用户隐藏“敏感”数据的过程。这是通过将字段声明为 private 来完成的
如果您不指定访问修饰符,默认情况下,类的所有成员都是 private:
示例
  1. class Car
  2. {
  3.   string model;  // private
  4.   string year;   // private
  5. }
复制代码
C# 属性(Get 和 Set)

在开始解释属性之前,您应该对“封装”有一个基本的了解。
封装的含义是确保对用户隐藏“敏感”数据。要实现这一点,您必须:

  • 将字段/变量声明为 private
  • 通过属性提供 public get 和 set 方法来访问和更新 private 字段的值
属性
private 变量只能在同一类中访问(外部类无法访问它)。但是,有时我们需要访问它们 - 这可以通过属性来完成。
属性就像是变量和方法的结合,它有两个方法:get 方法和 set 方法:
示例
  1. class Person
  2. {
  3.   private string name; // 字段
  4.   public string Name   // 属性
  5.   {
  6.     get { return name; }   // get 方法
  7.     set { name = value; }  // set 方法
  8.   }
  9. }
复制代码
示例解释

  • Name 属性与 name 字段相关联。通常的做法是属性和 private 字段使用相同的名称,但首字母大写。
  • get 方法返回 name 变量的值。
  • set 方法将一个值赋给 name 变量。value 关键字表示我们赋给属性的值。
使用属性
现在我们可以使用 Name 属性来访问和更新 Person 类的 private 字段:
示例
  1. class Person
  2. {
  3.   private string name; // 字段
  4.   public string Name   // 属性
  5.   {
  6.     get { return name; }
  7.     set { name = value; }
  8.   }
  9. }
  10. class Program
  11. {
  12.   static void Main(string[] args)
  13.   {
  14.     Person myObj = new Person();
  15.     myObj.Name = "Liam";
  16.     Console.WriteLine(myObj.Name);
  17.   }
  18. }
复制代码
输出
  1. Liam
复制代码
自动属性(简写)
C# 还提供了一种使用简写/自动属性的方法,您无需为属性定义字段,只需在属性中编写 get; 和 set;。
以下示例将产生与上述示例相同的结果。唯一的区别是代码更少:
示例
  1. class Person
  2. {
  3.   public string Name  // 属性
  4.   { get; set; }
  5. }
复制代码
为什么要封装?

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

为了方便其他设备和平台的小伙伴观看往期文章:
微信公众号搜索:Let us Coding,关注后即可获取最新文章推送
看完如果觉得有帮助,欢迎 点赞、收藏、关注

来源:https://www.cnblogs.com/xiaowange/p/17991112
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具