2008-12-03 77 views
4

在C#中,如果我聲明一個自動實現的屬性,爲什麼我必須聲明get和set部分?爲什麼自動屬性需要getter和setter?

public string ThisWorks { get; set; } 

public string ThisDoesnt { get; } 

這不只是語法糖 - 即編譯器插入一個私有字段的屬性?那麼爲什麼這個問題?

好奇。

+0

兩者都正常工作,我全部使用它們 時間。 – 2008-12-03 14:16:57

+0

但請記住爲屬性添加一個類型。你的例子不會像現在這樣工作。 – 2008-12-03 14:17:31

回答

28

如果你沒有一個setter - 那麼你將如何設置屬性?

順便說一句,你可以指定輔助功能,如:

public string Foo 
{ 
    get; 
    private set; 
} 
11

一個自動實現的屬性沒有可訪問的專用存儲,那麼你就沒有辦法設置的值沒有二傳手,使得它完全無用。

12

沒有setter,你永遠無法提供一個值 - 因爲你沒有任何方式指定備份變量的名字。

我請求只讀自動屬性,聲明如下:

public string ReadonlyProperty { get; readonly set; } 

這將創建一個只讀變量後盾,只有獲取方法的屬性,並轉化爲直接訪問所有調用的setter變量。你只能在構造函數中調用setter - 就像正常的只讀變量一樣。

我們會看到這種請求是否做什麼好......這是一個真正的恥辱它不是在那裏的時刻,因爲這使得它很難實現穩定的類型比可變類型:(

3

你需要一個設置 - 否則,你的自動實現的屬性如何得到它的值?當自動實現屬性時,你必須有一個設置的訪問器,以便在構造時至少給它一個值

0

有趣的是,新的Roslyn編譯器Visual Studio 2015現在允許這樣做,即使項目配置爲使用C#版本5.

相關問題