C# 属性 (Get 和 Set)
属性和封装
在我们开始解释属性之前,您应该对封装"Encapsulation"有一个基本的了解。
封装的意义是确保对用户隐藏敏感数据。为此您必须:
- 将字段/变量声明为私有
private - 通过属性提供公共字段
public的值,通过get和set方法来访问和更新私有字段private。
属性
您从上一章了解到,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类的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;。
下面的示例将产生与上面示例相同的结果。唯一的区别是代码更少:
实例
Using automatic properties:
class Person
{
public string Name // property
{ get; set; }
}
class Program
{
static void Main(string[] args)
{
Person myObj = new Person();
myObj.Name = "Liam";
Console.WriteLine(myObj.Name);
}
}
输出将是:
Liam
为什么要用封装?
- 更好地控制类成员(减少自己(或他人)弄乱代码的可能性)
- 字段可以设置为只读(如果只使用
get方法),也可以设置为只读(如果只使用set方法) - 灵活:程序员可以更改代码的一部分而不影响其他部分
- 提高了数据的安全性

