zoukankan      html  css  js  c++  java
  • 【转】为什么要对字段封装属性

    为什么要对字段封装属性? 每次有新人来,都要问这个问题,我直接对字段操作多省事呀,就像这样:

    public class A
    {
       public  string _Name;    
    }

    public Class B
    {
       private A _MyA;
       public void DoB(string n)
       {
          _MyA._Name=n;
       }
    }

    很多砖家会毫不犹豫的说,你这样“封装不好”,于是新人眨着两只无神而又水汪汪的大眼睛,分明是在说:“这不脱了裤子放X吗”,心里一肚子不服气。 但从编程角度说,封装为属性除了从外面看起来“顺眼”些,还有啥实际作用呢? 牛人会巴拉巴拉讲出一大套,我就说一点简单而实用的,那就是是从调试角度看问题。 
    在调试中,我们经常为使用断点跟踪的方式,检查变量当时的数值,如果按照上面写的方式,很多地方都可能会出现对_Name赋值的情况,如果我发现_Name被设置了非法的数据,而想知道在何地被赋值的时候,上面的写法就很麻烦,只能先找到所有调用过_Name的地方(如果是C++的开发环境,找起来更麻烦),然后一个一个的筛。

    如果我们把代码写成这样:

      public class A
      {
         private string _Name;    
         public string Name
         {
           get{...};
           set{...};
         }
      }

      public Class B
      {
         private A _MyA;
         internal A MyA
         {
            get{...};
            set{...};
         }
         public void DoB(string n)
         {
            MyA.Name=n;
         }
      }

    调试的时候,只需要在Name.set的位置加断点,可以很快定位错误。   
       
    当然,一个好的习惯是对class内部的字段也尽量使用属性处理,就像class B中对 MyA的处理一样。就可以很容易的进行断点调试了。

    还有篇文章看看:http://blog.csdn.net/hamber_bao/article/details/6504621

  • 相关阅读:
    poj 1743 Musical Theme 后缀数组
    poj 1743 Musical Theme 后缀数组
    cf 432D Prefixes and Suffixes kmp
    cf 432D Prefixes and Suffixes kmp
    hdu Data Structure? 线段树
    关于position和anchorPoint之间的关系
    ios POST 信息
    CALayers的代码示例
    CALayers详解
    ios中得sqlite使用基础
  • 原文地址:https://www.cnblogs.com/netlyf/p/3763858.html
Copyright © 2011-2022 走看看