property:它是一个方法或一对方法,在客户端代码看来,它(们)是一个字段。

  1. class PhoneCustomer
  2. {
  3. private string _firstName;
  4. public string FirstName
  5. {
  6. get { return _firstName; }
  7. set { firstName = value; }
  8. }
  9. // etc.
  10. }

get访问器不带任何参数,且必须返回属性声明的类型
也不应为set访问器指定任何显式参数,但编译器假定它带一个参数,其类型也与属性相同,并表示为value
**

下面的代码包含一个属性Age,它设置了一个字段age。
在这个例子中,age表示属性Age的后备变量。

  1. private int age;
  2. public int Age
  3. {
  4. get { return age; }
  5. set { age = value; }
  6. }

自动实现的属性

如果属性的set和get访问器中没有任何逻辑,就可以使用自动实现的属性。
实现方法:

  1. public int Age { get; set; }

不需要声明私有字段。编译器会自动创建它。
使用自动实现的属性,就不能直接访问字段,因为不知道编译器生成的名称。

初始化

  1. public int Age { get; set; } = 42;

属性的访问修饰符

C#允许给属性的get和set访问器设置不同的访问修饰符,所以属性可以有公有的get访问器私有或受保护的set访问器。 :::danger 在get和set访问器中,必须有一个具备属性的访问级别。 :::

  1. public string Name
  2. {
  3. get
  4. {
  5. return _name;
  6. }
  7. private set
  8. {
  9. _name = value;
  10. }
  11. }

通过自动实现的属性,也可以设置不同的访问级别:

  1. public int Age { get; private set; }