根据属性的实现方式,属性可分为自动实现的属性和常规属性。
常规属性需要具体的人为的实现get访问器或者set访问器,而且一般需要有一个字段与之相对应;而自动实现的属性的get和set访问器的实现部分被省略掉了,而且代码中不需要有相对应的字段。
常规属性:
public class Person { //----------------------- //普通属性 //----------------------- private string name; /// <summary>姓名</summary> public string Name { get { return this.name; } set { this.name = value; } } }
自动实现的属性:
public class Person { //----------------------- //自动实现的属性 //----------------------- /// <summary>姓名</summary> public string Name { get; set; } }
可以给自动实现的属性的get访问器或者set访问器添加访问权限修饰符(private,protected,internal),以控制该属性的访问权限。
(*注意给get或者set访问器添加的访问权限修饰符的访问权限,必须比该属性整体的访问属性的访问权限要小)
通过给get或者set访问器添加的访问权限修饰符,实现只读或者只写:
public class Person { //----------------------- //自动实现的属性实现只读 //----------------------- /// <summary>姓名</summary> public string Name { get; private set; } }
public class Person { //----------------------- //自动实现的属性实现只写 //----------------------- /// <summary>姓名</summary> public string Name { private get; set; } }
自动实现的属性有以下几点需要注意:
①必须同时实现set访问器和get访问器,缺一不可;
②自动实现的属性,编译器在运行时会自动生成一个私有的字段,这个自动生成的字段不能够直接访问;
③当需要实现对数据的合法性验证或者其它特殊处理的时候不能用自动实现的属性。