zoukankan      html  css  js  c++  java
  • 关于get和set访问器以及属性和字段变量的区别问题

    属性是对一个或者多个字段的封装.
          类里面为什么要用一个共有的属性来封装其中的字段,也可以这样说用共有属性来封装私有变量,其中的好处应该大家都说的出来,就是为了实现数据的封装和保证了数据的安全,保护类里面的成员不被任意改动.例如下面的例子:

    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; 
            }
     
        }
     
    }


    总结:属性除了公布字段外,还可以在属性上添加对字段的约束规则,比如只读,只写,读写规则,还可以对属性的值进行逻辑验证等等.另外从软件设计的角度来看,属性是方法,应该被 公开,而字段是数据 ,应该被封装.
       希望以上的讲解能帮到跟我一起在路上的软件开发者们,在此向园子的的软件大牛 级专家致敬,自己需要学习的东西太多太多.

  • 相关阅读:
    跟小静学CLR via C#(12)委托Delegate
    跟小静读CLR via C#(02)基元类型、引用类型、值类型
    跟小静读CLR via C#(07)静态类,分部类
    jQuery折叠菜单
    ajax调用后台Datatable
    跟小静读CLR via C#(11)无参属性、索引器
    跟小静读CLR via C#(08)操作符
    跟小静读CLR via C#(05) 访问限定、数据成员
    AjaxPro排错指南
    跟小静读CLR via C#(14)可空值类型,关于?和??的故事
  • 原文地址:https://www.cnblogs.com/love828/p/3237108.html
Copyright © 2011-2022 走看看