2011-06-30 143 views

回答

16

公共屬性訪問器將爲您提供更大的靈活性。

如果你想添加驗證來設置值,你只需寫一個非默認的setter。您的其他代碼都不需要修改。

也有可能是你想用代碼替換默認getter的原因。這可能是一個公共變量的真正痛苦。

+0

誰寫的代碼取決於是否可見的名稱是變量或屬性?這是我認爲這很重要的唯一原因,否則你可以改變它並重新編譯。 – 2011-07-01 01:11:59

+1

@moz:如果你的公共變量是在一個單獨的二進制文件?您的應用程序將使用變量..當您將其更改爲屬性時,該變量消失,您現在有兩個生成的函數。你必須重新編譯每個引用它的二進制文件。 – Rob

+2

@Rob:所以屬性好處主要適用於僅作爲二進制文件發佈的庫?對於內部代碼,不是那麼多? – 2011-07-01 01:36:43

1

公共屬性通過公開的getter和setter方法訪問字段和內部類代碼。公共領域直接進入該領域。

使用propertys提供了提供抽象層和設計層的能力(能夠使set訪問器保護,私有)。

當指定一個屬性並且沒有主體存在時,由用於存儲該值的編譯器創建基礎專用字段。基本上:

private int item = 0; 
public int Item { 
get { return item; } 
set {item = value; } 
} 

一般來說,我傾向於使用公共暴露變量的屬性和私人領域。如果多次訪問該字段並且速度是關鍵設計要求,我可能會考慮使用字段。

4

除了其他的答案,你也可以使用一個屬性,使值只讀甚至設置只:

public int Item { get; private set; } // read-only outside the class. Can only be set privately. 

我也碰到的情況,我決定以後我要代理一個對象,或添加基本上需要屬性的AOP。