C#中的GET和SET访问器

来源:互联网 发布:淘宝试客是什么 编辑:程序博客网 时间:2024/05/06 12:47
我们在学习C#语法的属性时,都要首先和GET,SET访问器打交道,从英文的字面意思上理解,GET应该就是获得什么什么,而SET应该是设置什么什么,那我们看一下,官方是怎么定义这对访问器的:get是读取属性时进行的操作,set是设置属性时进行的操作。定义一个属性如果只有get,这个属性就是只读的。同样,只有set,属性就是只写的,当然只写的属性我觉的意义不是很大。

接下来我们通过一些代码实例来接触一下GET和SET访问器

 

class Bank { private int money;//私有字段 public int Money //属性 { //GET访问器,可以理解成另类的方法,返回已经被赋了值的私有变量money get { return money; } //SET访问器,将我们打入的值赋给私有变量money set { money = value; } } }

 

我们可以打个生动的比方:

Money属性就像银行里的自动存取款机,你看不见里面的money,但你能用set(存钱),用get(取钱)。money是一个私有字段,是分装在类中的,类以外的程序不能直接访问的,类的set和get成员是外部程序访问类内部属性的唯一方法,就像你去银行取钱,你不能直接从银行的保险柜里拿到钱,而是银行营业人员把钱取出来给你的。
那我们设置了Money属性,怎么使用呢??

 

class Program { static void Main(string[] args) { //实例化一个Bank银行 Bank bank = new Bank(); //对Money属性做赋值操作,这时我们访问的是SET访问器 bank.Money = 15; //对Money属性做取值操作,这时我们访问的是GET访问器 int a = bank.Money; } }

 细心的朋友可以发现当我们设置断点在SET访问的中,执行代码 bank.Money = 15;时,就会进入我们属性中的SET访问器了。

 

以上就是我们的SET和GET访问器的最基本的应用了。

但是我们为什么要用GET和SET访问器呢??
通过GET和SET对公有变量Money进行读写操作,实际就是间接更改money私有变量的值,那既然如此。为何不设money为public,让实例直接对money进行读写操作呢?我们是不是在多此一举呢?

其实,我当初刚接触GET和SET就很理解,并不是说他们的含义难理解,而是为什么要用?为何不直接用个public的字段变量来代替呢?

理解一:用了GET和SET能让赋值和取值增加限制

 

class Bank { private int money;//私有字段 public int Money //属性 { //GET访问器,可以理解成另类的方法,返回已经被赋了值的私有变量money get { return money; } //SET访问器,将我们打入的值赋给私有变量money,并且加了限制,不能存负的 set { if (value >= 0) { money = value; } else { money = 0; } } } }

这样的话,我们是永远无法给Money属性赋值负的金钱了!

其实这种应用才我们的实际的项目中,属性设置中非常常见!例:

 

public string ApplyStaff { //延迟加载ApplyStaff对象 get { if (this.IsGhost) { LazyLoaderFactory.GetLoader().LoadApplicationConfirm(this); } return applyStaff; } set { //判断输入的字符的长度 if (value.Length > 40) { throw new Exception("领用人不能超过40个字符。"); } this.applyStaff = value; } }

 

public string BillName { get { return billName; } set { if (value==string.Empty) { throw new Exception("单据名称不能为空"); } else if (value.Length > 40) { throw new Exception("单据名称长度不能超过40个字符"); } else { this.billName = value; } } }

如果在SET访问器中设置这个属性的一些特性,比如说不能为空,长度大小,必须为数字,各类正则表达式等等,然后抛出异常,表示层再来接受,这样就可以少写很多验证程序了。

理解二:封装性、安全性、完整性

我也没想太明白

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 柿子核吃下去了怎么办 橡胶底白色变黄怎么办 20了丁丁还很小怎么办 5角硬币吞进肚子怎么办 孩子吞了5角硬币怎么办 左腿比右腿微粗怎么办 一个腿长一个腿短怎么办 刚买的毛笔很硬怎么办 我哥哥太爱我了怎么办 如果婚姻无法维持该怎么办 捡了一只流浪狗怎么办 微博加载不出来怎么办 我的脾气很暴躁怎么办 歌单恢复已删除怎么办 家里破产了我该怎么办 对付有心计的人怎么办 上嘴唇无故肿了怎么办 下嘴唇肿了一半怎么办 狗狗早上叫不停怎么办 狗在家乱咬东西怎么办 狗狗晚上一直叫怎么办 金毛幼犬晚上叫怎么办 金毛晚上老是叫怎么办 5岁宝宝总尿裤子怎么办 2岁宝宝尿裤子怎么办 2周岁宝宝尿裤子怎么办 5岁宝宝尿裤子怎么办 模拟人生4不怀孕怎么办 狗狗的毛打结怎么办 狗狗生病了不吃东西怎么办 给领导送礼不收怎么办 国外弃货,货代怎么办 不小心拜了阴庙怎么办 要考试了不想考怎么办? 刚怀孕喝了红酒怎么办 不知道该怎么办的成语 墙纸3年了有味道怎么办 本命佛不要了怎么办 本命佛不想戴了怎么办 刚养的猫怕人怎么办 吃了马蜂蛹过敏怎么办