公共变量与属性的区别
在我们的程序中经常会出现以下代码。
成员变量:
public string Name;
类属性:
public class People { private string name; public string Name { set { name = value; } get { return name; } } }
像上面这样的代码到底两者有什么不一样呢?对其他对象来说,这两者都是同样的访问,同样的赋值。一个是变量,一个是属性。
首先基于面向对象的原则来看。面向对象编程的目的是要做到抽象、封装;在类中,变量是对类本身而言的,我们把它叫做域。它可以为public、private等;属性是类的外部显示出来的特性。虽然域可以为public,但这样把域申明为public将不利于类的封装,因为外部使用者可以对类进行直接修改。
所以我们就可以用到属性,我们只是公开了它们的属性,至于如何对其进行赋值(set)如何进行取值(get)都已经进行了封装(在set和get中我们可以做一些自己的处理),对于类外部是不可见的。
C#中的属性更充分地体现了对象的封装性:不直接操作类的数据内容,而是通过访问器进行访问。借助于get和set对属性的值进行读写操作和执行语句过程。属性具有多种用法:它们可在允许更改前验证数据;它们可透明地公开某个类上的数据,该类的数据实际上是从其他源(例如数据库)检索到的;当数据被更改时,它们可采取行动,例如引发事件或更改其他字段的值。
总结归纳有以下几点区别:
属性是对字段的封装。
属性可以控制读写,变量不可以。
属性可以进行赋值操作,变量不可以。
经过实践发现,当我们对一个对象进行数据绑定时,属性是可以正常绑定的,变量就不行。所以,当我们需要将类中的一个值设为public时,应该尽量使用属性而不是变量。