C#属性(Property)
代码
public string Name { get; set; }
或者
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
说明:
- 上述两种写法本质是都是一样的,第一种是简写。
- get和set是两个方法,并且每一个属性都有对应的私有字段。
- 当给属性赋值的时候,其实是调用set方法,给对应的私有字段赋值;当读取属性值的时候,其实是调用了get方法,从对应的私有字段里面把值取出来。
数据存储
属性本身其实并没有保存数据,数据是保存到属性对应的私有字段中。
作用
属性是外界访问对象数据的“入口”,好比USB接口。
属性是为了更好的实现需求的变换的扩展,从而让一个属性可以实现多样的需求。
属性的扩展
【1】增加业务判断逻辑。
【2】设置只读字段功能。
【3】设置只读业务逻辑。(可以没有私有字段)
必须使用属性的场景
dgv表格数据显示,使用了属性的绑定
属性和字段的对比
【1】字段,又称为“成员变量”
- 目的:字段是为类的内部方法,或者方法之间传递数据使用的,强调对内使用。
- 修饰:字段一般用private修饰,很少用public。
- 读写:字段读写均可,也可以用readonly限制为只读,但是不能添加业务逻辑。
【2】属性
- 目的:属性是对外提供数据访问,本身不保存数据,强调对外使用。
- 修饰:属性都是public,从来不用private。
- 读写:属性可以轻松的实现单独读写控制,并且可以添加任意需要的业务逻辑。
- 强制:dgv列表必须强制使用属性,不能使用公有字段。
属性的新特性(.NET Framwork 4.6版本及以上)
【1】属性直接初始化
public string Name { get; set; } = "XXX";
【2】属性表达式(一般用于只读)
// 未使用属性表达式
public DateTime CollectionTime
{
get { return DataTime.Now; }
}
// 属性表达式
public DateTime CollectionTime CollectionTime2 { get => DateTime.Now; }
// 或者
public DateTime CollectionTime CollectionTime2 => DateTime.Now;
总结
开发中,只要对外使用数据,都用属性,即使没有任何扩展业务,也不建议使用public类型的字段。