C# 属性(获取和设置)
属性和封装
在我们开始解释属性之前,您应该对封装有一个基本的了解。
封装的含义是确保“敏感”数据对用户隐藏。为了实现这一目标,您必须:
- 将字段/变量声明为
private
- 通过属性提供公共
get
和set
方法来访问和更新私有字段的值
属性
您从上一章中学到,private
变量只能在同一个类内部访问(外部类无法访问它)。但是,有时我们需要访问它们——这可以通过属性来实现。
属性就像变量和方法的组合,它有两种方法:get
和 set
方法:
实例
class Person { private string name; // 字段 public string Name // 属性 { get { return name; } // get 方法 set { name = value; } // set 方法 } }
例子解释:
Name
属性与 name
字段相关联。将属性和私有字段使用相同的名称(但属性的首字母大写)是一种好的做法。
get
方法返回变量 name
的值。
set
方法为 name
变量分配一个值。value
关键字代表我们分配给属性的值。
提示:如果您不完全理解它,请查看下面的实例。
现在我们可以使用 Name
属性来访问和更新 Person
类的私有字段:
实例
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 = "Elon"; Console.WriteLine(myObj.Name); } }
输出将是:
Elon
自动属性(简写)
C# 还提供了一种使用简写/自动属性的方法,您不必为属性定义字段,而只需在属性内部编写 get;
和 set;
即可。
以下实例将产生与上述实例相同的结果。唯一的区别是代码更少:
实例
使用自动属性:
class Person { public string Name // 属性 { get; set; } } class Program { static void Main(string[] args) { Person myObj = new Person(); myObj.Name = "Elon"; Console.WriteLine(myObj.Name); } }
输出将是:
Elon
为什么要封装?
- 更好地控制类成员(减少自己(或其他人)搞乱代码的可能性)。
- 可以将字段设置为只读(如果仅使用 get 方法),或只写(如果仅使用
set
方法)。 - 灵活:程序员可以更改代码的一部分,而不会影响其他部分。
- 提高数据安全性。