我知道的是,屬性是為了封裝可是,有時候?qū)傩栽O(shè)置為private int a;public int A{ get{return this.a} set{this.a = value} }這樣的情況使用屬性來封裝有什么意義嗎?為什么不直接寫public int a;屬性還可簡寫為public int A {get;set;} 這樣的情況我也想問上面的問題另外屬性可以設(shè)置只讀和只寫,如果這樣設(shè)置的話...例如public int A{get;}這樣的屬性如何給它賦值呢?即使在類的內(nèi)部也不可以(至少我還不知道)一個從來不能被賦值的屬性又有何意義呢?屬性限制字段的合理性這個我也了解的但我看的書里很多時候在屬性里沒有對字段做任何特殊處理,讓人很迷惑還有就是上面圖片里的問題,這樣寫在構(gòu)造里也是不能賦值的
2 回答

慕少森
TA貢獻2019條經(jīng)驗 獲得超9個贊
公有屬性是在任何外部類都可訪問到的,如果有人不懷好意就會隨意的修改的public字段,很危險的,但是如果改成private,就不能擅自修改,只能通過屬性,而在屬性里是可以加代碼來判斷別人付的值是否符合你的要求,不符合的可以直接拒絕賦值,這樣就增加了安全性

侃侃爾雅
TA貢獻1801條經(jīng)驗 獲得超16個贊
當為A賦值時內(nèi)部的b變量也要改變時,用屬性這個方法是最好不過的了。
1 | int a; int b; public int A { get { return this .a; } set { this .a = value; this .b = value + 1; } } |
當然,public int A也是可以的,只是賦值和取值都只會取本身的值不會去改變其他的東西。
1 | public int A { get ; set ; } |
在net frmaework 2.0里是不支持的。
1 | public int A { get ; } |
這種編譯器都把它看作是ReadOnly了,無法直接賦值,但你可以進行反射或者在構(gòu)建函數(shù)里改目標值:
public class ABC : Form { int a = 5; //直接賦值 public int A { get { return a; } } //如果沒有構(gòu)建函數(shù),那么會返回默認值5 public ABC() { //構(gòu)建函數(shù) a = 10; //構(gòu)建函數(shù)之后,再調(diào)用A會返回a的值10 } } |
【對于public int A{get;}這種就只能用反射了。】就好像一個類(球),它有個屬性Type(類型)是"圓",這時你改成"正方形"就好像不對頭尾了吧,本來是"球"的類,還配對"正方形",這時你就需要不讓用戶修改這個值(ReadOnly),一直保持是"圓"。
添加回答
舉報
0/150
提交
取消