在第一個示例中,您將在靜態構造函數中對其進行更改,如果您在其他任何靜態方法/屬性中對其進行了更改,則會出現編譯器錯誤。
在第二個示例中,您試圖在非靜態構造函數中更改static readonly
成員,這是不允許的。
您只能在static
構造函數中更改static readonly
成員。這樣想,static
構造函數會運行一次,然後爲每個實例調用實例構造函數。如果每個實例都可以更改它,該屬性將不是readonly
。
你可以,當然,在構造改變非static
readonly
實例成員:
public static readonly bool MaximumRecipientsReached = false;
public readonly bool MyInstanceReadonly = false;
static AdditionalRecipient()
{
// static readonly can only be altered in static constructor
MaximumRecipientsReached = true;
}
public AdditionalRecipient()
{
// instance readonly can be altered in instance constructor
MyInstanceReadonly = true;
}
而且,我對你們的困惑「PS:當然我使用的屬性」。屬性不能被聲明爲readonly
,如果你想要這些是屬性並且是readonly
-ish,那麼你需要使它們成爲private set
- 除非你使用的是後臺字段。我提出的主要原因是因爲使用具有私有集合的屬性將允許您執行代碼嘗試執行的操作,因爲類本身可以在任何方法或構造函數中更改屬性(靜態或實例),但代碼課外不能。
// public getters, private setters...
public static bool MaximumRecipientsReached { get; private set; }
public static IList<EmailAddress> Contacts { get; private set; }
你得到的錯誤信息是什麼? – Servy 2012-07-05 13:48:47