C#篇(一)——字段与属性

字段和属性有什么区别?

    class Student
    {
        private int age;
        public int Age
        {
            get
            {
                return age;
            }
            set
            {
                age = value;
            }
        }
    }

你有没有想过:为什么要有属性?为什么不直接将字段设置为公有?
简单的总结:属性更像是方法,用属性来代替直接访问字段可以有更好的逻辑控制。
比如:

    class Student
    {
        private int age;
        public int Age
        {
            get
            {
                return age;
            }
            set
            {
                if(age > 0 && age < 200)
                {
                    age = value;
                }
                else
                {
                    throw new Exception("年龄不合法");
                }
            }
        }
    }

当然也可以通过属性来限制只能设置或获取某一个字段的值。

一个属性是否必须和一个字段相对应?答案是不一定。

    class Student
    {
        private int age;
        public int Age
        {
            get
            {
                return 0;
            }
            set
            {
               //...
            }
        }
    }

自动实现的属性,实现的原理?
在c#中可能会经常看到类似下面的属性:

    class Student
    {
        //自动实现的属性
        public int Age{ get; set; }
    }

那它的内部实现机制呢?————单独的属性是不能存储数据的,数据都保存在字段中。
这是C#提供的一种简单的语法,称为自动实现的属性,声明属性而不提供get/set方法的实现,C#会自动的声明一个私有字段(编译器幕后做的工作)。在本例中,字段类型是int,也就是属性的类型。另外,编译器会自动实现get_Age和set_Age方法,分别返回和设置字段中的值。
get_Age和set_Age从哪来?
下一篇 C#篇(二)——属性的实质 我们再做分析。

原文地址:https://www.cnblogs.com/forcheng/p/6483919.html