C#和Java的get,set方法对比
1.get,set这两个访问器作用:在面向对象编程里面,有的类的数据是私有的,是封装起来的,所以为了读取和写入对应的私有数据,c#采用了关键字get和set,其中get负责读取私有数据(获得值),set负责写入私有数据(赋值)。
2.Money属性就像银行里的自动存取款机,你看不见里面的money,但你能用set(存钱),用get(取钱)。money是一个私有字段(private修饰),是分装在类中的,类以外的程序不能直接访问的,类的set和get成员是外部程序访问类内部属性的唯一方法,就像你去银行取钱,你不能直接从银行的保险柜里拿到钱,而是银行营业人员把钱取出来给你的。
1 class Bank 2 { 3 private int money;//私有字段 4 5 public int Money //属性 6 { 7 //GET访问器,可以理解成另类的方法,返回已经被赋了值的私有变量money 8 get { return money; } 9 //SET访问器,将我们打入的值赋给私有变量money 10 set { money = value; } 11 } 12 }
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 //实例化一个Bank银行 6 Bank bank = new Bank(); 7 8 //对Money属性做赋值操作,这时我们访问的是SET访问器 9 bank.Money = 15; 10 11 //对Money属性做取值操作,这时我们访问的是GET访问器 12 int a = bank.Money; 13 } 14 }
设置断点在SET访问的时候,执行代码 bank.Money = 15;就会进入属性中的SET访问器。
3.为什么要使用get,set访问器:
用了GET和SET能让赋值和取值增加限制
1 class Bank 2 { 3 private int money;//私有字段 4 5 public int Money //属性 6 { 7 //GET访问器,可以理解成另类的方法,返回已经被赋了值的私有变量money 8 get { return money; } 9 //SET访问器,将我们打入的值赋给私有变量money,并且加了限制,不能存负的 10 set 11 { 12 if (value >= 0) 13 { 14 money = value; 15 } 16 else 17 { 18 money = 0; 19 } 20 } 21 } 22 }
这样的话,我们是永远无法给Money属性赋值负的金钱数。
1 public string ApplyStaff 2 { 3 //延迟加载ApplyStaff对象 4 get 5 { 6 if (this.IsGhost) 7 { 8 LazyLoaderFactory.GetLoader().LoadApplicationConfirm(this); 9 } 10 return applyStaff; 11 } 12 set 13 { 14 //判断输入的字符的长度 15 if (value.Length > 40) 16 { 17 throw new Exception("领用人不能超过40个字符。"); 18 } 19 this.applyStaff = value; 20 } 21 } 22 23 public string BillName 24 { 25 get 26 { 27 return billName; 28 } 29 set 30 { 31 if (value==string.Empty) 32 { 33 throw new Exception("单据名称不能为空"); 34 } 35 else if (value.Length > 40) 36 { 37 throw new Exception("单据名称长度不能超过40个字符"); 38 } 39 else 40 { 41 this.billName = value; 42 } 43 } 44 }
Java的set,get访问器:作用与C#相同,但是构造方法不同,一般是使用getXXX,setXXX这样的构造方法,可以使用alt+insert快速构建。