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
方法) - 灵活:程序员可以更改代码的一部分而不影响其他部分
- 提高了数据的安全性