日期:2014-05-17  浏览次数:20819 次

set 和 get 方式 有啥好处?
例如一个成员变量:
public string abc;

为什么要定义成
private string _abc;
public string abc{ 
       get{ return _abc;} 
       set{_abc = valve;}
}


这样的封装有什么好处呢? 通常什么情况下,采用这样的方式声明?


------解决方案--------------------

属性跟字段的好处。
------解决方案--------------------
C#中get和SET,看来看去还是看不懂,通俗一点解释一下,用了有什么好处,不用会怎么样
如果你这样写是没有什么不一样的. 
private int __Old; 
public int Old{ 
get{return __Old;} 
set{__Old = value;} 
}

 
但是如果你这样写就不一样了. 
private int __Old; 
public int Old{ 
get{return __Old;} 
set{// 这里加入了验证代码 
if(value<0) 
throw new ArgumentOutException("value", "输入值不能小于0"); 
__Old = value; 
}

 
上面的例子说明属性中可以添加些代码进行处理. 也可以设置的访问的权限等.
 

在类中定义一个属性 
public class Student 

private string name 
public string Name 

set{name=value;}//这里是给私有属性name赋值 
get{return name;}//这里取出私有属性name的值 


c#在定义类时,通常要把类中声明的对象封装起来,使得外界不能访问这个属性。上述代码中如果去掉set部分,则外界只能读取name的值,如果去掉get部分,则只能给name赋值。这样就可以控制外界对私有属性name的访问权限了,这种写法是C#的一个特性。
 
当然你也可以通过自己创建函数来对name进行取值和赋值,但这样就显得比较麻烦了。
 

属性与普通变量不同就在于, 普通变量就是放在屋子里的东西, 是什么样明明白白. 而属性则是在屋子的门口放了个守门人, 你拿东西放东西要经过他.
 
这个守门人就是属性访问器, 拿东西就是 get, 放东西就是 set. 怎么拿怎么放是它说了算, 虽然你觉得好像就是直接拿直接放差不多. 
GET SET 就是对外的接口 ,一般在实例中访问成员数据需要这个成员数据的访问方式为PUBLIC ,现在C#很高级了,GET 就是获取,SET 就是设置,但是它提供了跟好的收缩性,对GET 和SET 可以单独设置访问权限 比如你对某个成员数据只能读取或者只写,或者只有派生类可以访问等。。。 相对以前来说,没有属性访问器,需要通过函数来调用私有成员数据,属性提供了高效的访问模式和简单的书写。 
就是为了安全啊~~ 
字段是你具体要操作的数据所以他的值不能出错,可是你又不能避免用户犯错~~ 
为了安全就用属性来给字段赋值,因为 在set中你可以对数据的安全进行验证, 
get就更简单了验证完数据了就要把值给了字段所以要get 
------解决方案--------------------
封装,隐藏
------解决方案--------------------
可以对小窗户做一些控制,例如加个透光玻璃什么的
------解决方案--------------------
官方解释:封装就是隐藏实现细节将属性私有化,提供公有方法访问私有属性,通过这些公有方法访问私有属性,这样让数据更加安全。

------解决方案--------------------
如果是纯粹的get;set;仅仅与环境相关,比如可以作为接口实现,或者某个框架数据处理仅支持属性。
其它情况,应该把它看成两个函数的简写。
------解决方案----