C# 属性与字段

时间:2021-03-28 14:53:03

属性和字段的区别:

  • 属性是逻辑字段,是字段的扩展,并不占用实际的内存;而字段占用内存空间。
  • 属性可以被其他类访问;而非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参数传递。

备注:若有遇到接口中定义属性(属性属于方法故接口可以定义),但是在做数据库数据映射并保存的时候,是不能用接口做映射的,因接口不能定义字段,而属性不保存内容,只有字段才保存内容,当一个类继承接口则这个类就有了接口的属性,并自动定义字段(自动属性),就可以保存内容了