慕工程0101907
2021-11-19 15:11:29
我知道的是,屬性是為了封裝可是,有時(shí)候?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è)從來不能被賦值的屬性又有何意義呢?屬性限制字段的合理性這個(gè)我也了解的但我看的書里很多時(shí)候在屬性里沒有對字段做任何特殊處理,讓人很迷惑還有就是上面圖片里的問題,這樣寫在構(gòu)造里也是不能賦值的
2 回答

哆啦的時(shí)光機(jī)
TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個(gè)贊
因?yàn)槟愣x的字段是不希望“別人”看見的,所以設(shè)置為私有的,但是方法卻是可以公用的。此外,一般情況下只會對屬性設(shè)置可讀,限制為可寫的還真沒見過。這樣也是為了安全性考慮。

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