C# 属性与字段
属性和字段的区别:
- 属性是逻辑字段,是字段的扩展,并不占用实际的内存;而字段占用内存空间。
- 属性可以被其他类访问;而非public的字段不能被直接访问。
- 属性可以对接受的数据在范围上做限定;而字段不能。
- 属性原则上是方法内容保存在代码区,
常规属性和自动属性:
常规属性,一般我们手动定义 私有字段并定义属性访问该字段,这就是常规属性,
private int _age; public int Age { get { //可添加逻辑最后已return返回 return _age > 10 ? _age : 0; } set { if (!_age.Equals(value)) { //TODO 添加逻辑 最后给私有字段赋值 _age = value; } } }
自动属性,一般我们做数据库到C#集合的映射时只定义一个属性,
Public int Age { get;set;}
1.自动实现的属性必须同时声明 get 和 set 访问器。创建 readonly 自动实现属性时,需要将set 访问器设置为private 。
2自动实现的属性上可以使用特性,不能用在支持后备字段上。 如果属性的后备字段上使用特性,则应该只创建常规属性。
3.自动实现属性get,和set中不能包含特殊的逻辑处理。与字段类似,但不同于字段。与字段不同,属性不作为变量来分类,不能将属性作为 ref参数或 out参数传递。
备注:若有遇到接口中定义属性(属性属于方法故接口可以定义),但是在做数据库数据映射并保存的时候,是不能用接口做映射的,因接口不能定义字段,而属性不保存内容,只有字段才保存内容,当一个类继承接口则这个类就有了接口的属性,并自动定义字段(自动属性),就可以保存内容了