为什么用共有属性来封装私有变量

属性是对一个或者多个字段的封装.
      类里面为什么要用一个共有的属性来封装其中的字段,也可以这样说用共有属性来封装私有变量,其中的好处应该大家都说的出来,就是为了实现数据的封装和保证了数据的安全,保护类里面的成员不被任意改动.例如下面的例子:
class myclass
{
    private int age;//私有的字段
    public  int Age //属性
    {
        get
        {
            return this.age;
         }
        set
        {
            this.age=value;
         }
     }
}
仅仅从这里我想看不出到底把私有字段age封装在Age属性里面的好处在哪里?因为我们直接操作Age属性也可以达到对age字段的任意赋值和修改嘛.这段代码其实和下面这段代码没有区别.
class myclass
{
    public int age;
}
就是把age字段变量直接共有.
但是如果涉及到对这个字段进行一些逻辑控制的时候,属性中能实现各种复杂的逻辑,而这些都不是直接把一个字段共有所能实现的.从这里就能体现出get和set访问器带来的好处了.下面具体讲讲.
1、属性可以只读或只写,比如下面代码,共有字段变量一定是可读写的。
2、属性可附带错误检查或额外的的代码,共有字段变量的读写不能。
3、虽然这些都是编译器给带来的好处,但封装有很多好处,像细节隐藏,实现隐藏等。比如说有一天人可以活到200岁,更改if(value > 200)不会影响其他调用Age的函数。

class myclass
{
    private int age;//私有的字段
    public int Age //属性
    {
        set
        {
            if(value < 0 || value > 200)
            {
               throw new Exception("");    // checking
             }
            if(this.age != value)
            {
               this.ageChanged = true;        // extra routine
             }
            this.age=value;
         }
     }
}

总结:属性除了公布字段外,还可以在属性上添加对字段的约束规则,比如只读,只写,读写规则,还可以对属性的值进行逻辑验证等等.另外从软件设计的角度来看,属性是方法,应该被 公开,而字段是数据 ,应该被封装.

posted @ 2011-08-03 11:21  为乐而来  阅读(710)  评论(0编辑  收藏  举报