找回密码
 立即注册
查看: 5605|回复: 75

[常见问题] c#中的set和get

[复制链接]
发表于 2015-2-5 17:28 | 显示全部楼层 |阅读模式
在蛮牛教育上看了看c#的基础课程,前几天是写了单例模式,今天再详细介绍一下get和set的用法  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", "蛮牛教育");
__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
set的中文意思是“设置”;
get的中文意思是“获得”;

补充:

get 和 set 会在相应的时候自动调用
主要是为了隐藏程序内的数据结构时用
get是获取该属性的值,
set设置该属性的值。
在用set时有一个特殊的变量value
就是设置属性时的值

value 隐式参数,用于设置访问器以及添加或移除事件处理程序。

对类的属性进行 设置
比如用类名.属性=“”赋值 set作用
变量=类名.属性 取值 get 作用


发表于 2017-4-1 13:57 | 显示全部楼层
很不错
发表于 2017-4-1 13:44 | 显示全部楼层
楼主是超人
发表于 2017-4-1 13:43 | 显示全部楼层
好帖就是要顶
发表于 2017-4-1 14:16 | 显示全部楼层
难得一见的好帖
发表于 2017-4-1 13:28 | 显示全部楼层
很好哦
发表于 2017-5-6 12:27 | 显示全部楼层
很不错
发表于 2017-5-6 12:42 | 显示全部楼层
楼主是超人
发表于 2017-5-6 12:48 | 显示全部楼层
难得一见的好帖
发表于 2017-5-6 12:50 | 显示全部楼层
说的非常好
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-23 08:52 , Processed in 0.069192 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表