忽然间想起c#中字段和属性有什么区别,百度一下,有人说字段和属性差不多,结果参考了一下苏坤老师讲的c#,才明白,原来在c#中字段和属性真的不是一个概念!
1)很多人会说,类中不就是包括属性还有方法吗,这个字段是个什么东西?别急,上程序一看……
大家说Person这个类中的姓名和年龄是叫字段呢还是叫属性呢,可能很多人就觉得应该叫属性。其实是错了。c#中规定,name和age叫字段,而不叫属性。为什么这样呢?试看上面的程序,p.age = -10;我们将一个人的年龄赋个负数,OK,编译会出错吗?不会!为什么?因为Person类的age完全暴露给我们,我们在main()方法中想赋什么样的值都行……极为不合理,也不安全!所以c#规定name和age是字段。
2)何为属性?
c#中属性的引起,其实就是为了保护“不安全”的字段的,比如上面Person类的字段age,如果将age的访问修饰级别改为private,从main()方法中就无法对age进行访问,这样就保证了age不能被随意的修改。此时引入属性Age,访问修饰级别为public,包含两个方法---get和set方法。通过get和set方法,对private类型的age进行访问,并在set方法中可以对main()中赋的值进行判断后再赋值。这样通过属性Age使字段age的赋值结果更符合我们程序员的要求。上图说明一下……
此时在main()中通过对人类的属性Age赋值,就可控制我们随意对年龄赋的值,这样使字段age的结果更符合事实 ……
(注意:在main()方法中,如果p.Age = 18;此时会调用属性Age中的set方法,并且值18会自动赋给value,然后在 属性Age的set方法中做出判断,再给字段age赋值!)