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快速构建。

posted @ 2022-05-20 10:32  lc2100222  阅读(438)  评论(0)    收藏  举报