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