zoukankan      html  css  js  c++  java
  • 为什么用共有属性来封装私有变量

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

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



    欢迎加入JAVA技术交流QQ群:179945282

    欢迎加入ASP.NET(C#)交流QQ群:17534377


  • 相关阅读:
    node作为反向代理服务器
    引擎模板jade常见用法
    express4中模板引擎ejs
    express4+mysql博客项目
    关于zepto需要注意的地方
    css中需要注意的地方
    typescript基础类型
    vue全文搜索高亮显示
    js搜索全文高亮显示
    js随机验证码
  • 原文地址:https://www.cnblogs.com/q149072205/p/2125973.html
Copyright © 2011-2022 走看看