C#中的GET和SET访问器
来源:互联网 发布:淘宝试客是什么 编辑:程序博客网 时间:2024/05/06 12:47
接下来我们通过一些代码实例来接触一下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访问器中设置这个属性的一些特性,比如说不能为空,长度大小,必须为数字,各类正则表达式等等,然后抛出异常,表示层再来接受,这样就可以少写很多验证程序了。
理解二:封装性、安全性、完整性
我也没想太明白
- C#中的GET和SET访问器
- C#中的GET和SET访问器
- C#中get和set访问器
- c#中的get和set...
- c#中的get和set
- c#中的get和set
- C#中的get和set
- C#中get和set访问器的解释
- C#中get和set访问器的解释
- C#中属性 get和set访问器
- C#属性访问器 get set,和java比较学习
- get访问器和set访问器
- C#学习笔记--get/set访问器
- C#和java中的Get()与Set()
- c#中的get和set的用法
- C#中的get和set 方法
- C#中的set和get方法
- C#中的set和get方法
- poj 1850 Code 组合数学
- 具有展开收缩功能的UITableview
- 解决eclipse下android项目不能自动生成R.java文件
- 在Ubuntu上面创建一个dianping Scope
- C-表驱动-代码
- C#中的GET和SET访问器
- ORACLE 字符集转换:乱码问题
- 在Linux下串口信息的读取有了一点心得体会
- 读《暗时间》后感
- awk 运算符(算术运算符,赋值运算符,关系运算符,逻辑运算符,正则运算符)说明
- 标准I/O库
- 移动动画问题
- linux通过网络更新系统时间
- Shell: How to read lines in a file.