2009-07-30 93 views

回答

3

沒有沒有辦法做到這一點

2

號的屬性是用於控制私人支持字段訪問暴露接口(不是C#interface。在C#3中引入的特殊語法就是所謂的「語法糖」 - 編譯器實際上將它變成了一個私人領域,您從來沒有看到使用get/set屬性來訪問它。

編輯:屬性本身不存儲數據。他們只是控制訪問其他地方存儲的數據,其中一個常見的情況是在私人領域。

另一個編輯:這是糖語法我指的是:

// When this is compiled, it actually creates a private 
// field for you, which the property accesses. 
public int MyProperty 
{ 
    get; 
    set; 
} 
1

如果您的二傳手定義自定義代碼,但是簡單的,則還必須,如果你想它

定義get方法

你可以不寫這個自定義代碼的父親是

public String text {get; protected set} 

只允許類中的公共讀取權限和modifiction及其後代

0

當您應用自定義邏輯時,沒有辦法做到這一點。如果你有一個簡單的屬性,你可以這樣做:

public int Foo { get; set; } 

您還可以設置每個能見度:

public int Foo { get; private set; } 
0

你不能這樣做,對於一個物業,你不定義支持字段。定義這樣一個屬性時,C#編譯器會在MSIL中生成名稱爲<PropertyName>k_BackingFieldprivate字段。正如其他海報所指出的,至多你可以調整屬性上的訪問修飾符。

有關於太一些規則,基本都是常識:

  • 訪問控制上getset只能是比財產更嚴格。即您不能擁有私有財產名稱並給它一個publicgetset
  • 當屬性爲public時,您無法將getset確定爲private。至多有一個屬性可以是private

但是,這是C#編譯器提供的所有synthy糖。您可以自己提供支持字段,並提供您的獲取和設置屬性的實現。您可以選擇製作背景字段public

這兩種情況下生成的MSIL代碼只有很小的差別(生成的後臺字段包含System.Runtime.CompilerServices.CompilerGeneratedAttribute屬性。生成的getset方法也是如此)