【C#】 get和set

来源:互联网 发布:复制别人的小程序源码 编辑:程序博客网 时间:2024/05/01 16:48
【问题】
       对于get和set一直不是特别的理解,所以昨天遇到一个问题,代码走查了老半天最后结果是实体层的问题,其实就是get和set的问题。        
【探究】
1、get和set是什么
      get访问器,与方法相似,必须有返回属性类型的值。所以一般使用get访问器时这样写:get{return id}
      set访问器,与void相似,在用set时有一个特殊的变量value,就是设置属性时的值:set{id=value}
2、最直接的好处--安全性
       通过get和set方法,将变量私有化,只暴露方法让其他类访问。这样要访问或者改变的时候,改变的只是你new出来的对象,保证了数据的安全性。
3、这是一种C#特性
       C#在定义类时,通常要把类中声明的对象封装起来,使得外界不能访问这个属性。这样可以控制外界对私有属性的访问权限。例如 下面这段代码,如果只有get,那么就只有get访问器,只能读取该属性的值,无法对其赋值。如果只有set,那么就只有set访问器,除作为赋值的目标外,无法对其进行引用。
private string  id;            /// <summary>            /// 主键,自增            /// </summary>            public string Id            {                get {return id ;}                set {id =value ;}            }
4、封装,便于维护
      get和set方法时为了程序的封装,为了其他的类可以使用该类的私有方法。这就有点OO的意思了。假设要求将被使用100多次的变量id改为大写的ID,不进行封装直接对类的变量进行修改的话,可是要改100次的。如果使用get和set进行封装之后,只改一下这个类里面的这个id变量即可。
5、属性和变量的不同
       看到一个比喻感觉特别形象和准确:普通变量就是放在屋子里的东西,而属性则是在屋子的门口放了个守门人,你拿东西放东西都要经过守门人。这个守门人就是属性访问器,那拿东西就是get,放东西就是set了。
6、自动属性   
   public  class Comment    {       //一般属性用法                private string  id;            public string Id            {                get {return id ;}                set {id =value ;}            }       //自动属性            public string Id { get; set; }         }}
        自动属性是不对字段进行逻辑验证的操作。当这样写的时候,两种写法没任何区别。那么什么时候用一般写法,什么时候用自动写法呢
例如:当你需要对某个变量做一些限制的时候。
            public string Id            {                get {return id ;}                set {                    if (value .Length <=10)                    {                        id =value ;                    }            }
小结】
       这虽然是个小问题,但是暴漏出来好多问题。发现很多都只是知道该这样做,却不知道为什么这样做。例如某个设计模式怎么用,自己理解不太好,上网百度,照着实现出来了,却不知道为什么要这样子。例如抛异常,只知道要try...catch..finally..这样写,到底为什么要这样写,还是合作验收时师哥师姐解释的,才恍然大悟。米老师说让我们先去做,是让我们不必非要等到知其一又知其二然后再动手实现,在此之前就缩手缩脚不前进,但是不论哪种方式做出来之后,我们是要好好的理解一下的,将这部分知识转换为自己的,这一点我还很欠缺,慢慢改正。
0 0
原创粉丝点击