C# 属性(获取和设置)

属性和封装

在我们开始解释属性之前,您应该对封装有一个基本的了解。

封装的含义是确保“敏感”数据对用户隐藏。为了实现这一目标,您必须:

  • 将字段/变量声明为 private
  • 通过属性提供公共 getset 方法来访问和更新私有字段的值

属性

您从上一章中学到,private 变量只能在同一个类内部访问(外部类无法访问它)。但是,有时我们需要访问它们——这可以通过属性来实现。

属性就像变量和方法的组合,它有两种方法:getset 方法:

实例

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