2015-12-10 71 views
-1

爲什麼C#中的屬性不能只讀?爲什麼不能只讀屬性使用

當我嘗試有一個屬性只讀它指出:

修飾符「只讀」是不適用於這個項目

Simmilar問題在這裏問: Why can't properties be readonly? 但問題在5年前被問到,然後提供的答案是:因爲他們不認爲它通過。這是5年後的情況嗎?

編輯: 代碼示例:

public class GreetingClass 
{ 
    public readonly string HelloText { get; set; } 
} 
+0

能否請您發佈您的代碼 –

+4

好吧,在這5年之後,技術上沒有任何改變,所有你提到的問題的答案仍然是最新的。 –

+0

嗯,* property *只是'get' /'set'訪問器的一個方便的名字,它是一個*方法*。 –

回答

11

的屬性可以用C#是隻讀的,執行是不使用只讀關鍵字:如果您使用C#6

(VS 2015年),您可以使用以下行,該行允許在構造函數或成員定義中分配屬性。

public int Property { get; } 

如果您使用的是較舊的C#/ Visual Studio的版本,你可以寫這樣的事情,並在構造函數或字段定義分配領域:

private readonly int property; 
public int Property { get { return this.property; }} 
2

如果你想保留的屬性只讀,你可能只是定義其吸氣劑是這樣的:

public myProperty{get;} 
+0

是否適用於所有C#版本或僅適用於C#6 +? – Stralos

+0

它將適用於所有超過2.0 –

2

與出設置屬性是考慮在c#中的只讀屬性,您無需使用只讀關鍵字來指定它。

public class GreetingClass 
{ 
    private string _HelloText="some text"; 
    public string HelloText { get{return _HelloText;}} 
} 

凡在vb你必須指定:Public ReadOnly Property HelloText() As String

+0

可以通過私有變量返回值;請參閱anser中的更新 –

0

或多或少,從C#

class MyClass { 
    string MyProp { get; } 
    MyClass { MyProp = "Hallo Worls"; } 
} 

之前C#6你可以使用一個只讀的備份場代替:

使用它來寫這樣的事情可能
class MyClass { 
    private readonly string _myProp; 
    string MyProp { get { return this._myProp; } } 
    MyClass { this._myProp = "Hallo Worls"; } 
} 
0

如果你在GOOGLE上搜索在C#只讀屬性,你會得到100 * no_of_answers_here正確的結果。

https://msdn.microsoft.com/en-us/library/w86s7x04.aspx明確指出,沒有set訪問器的屬性是隻讀的。因此,認爲應用readonly關鍵字會導致冗餘,這是合乎邏輯的。

此外,在C#6.0中,即使使用包含類型(例如,class),也不能設置readonly屬性。在C#6.0中,您至少可以將其作爲初始化的一部分。這在C#6.0中有可能,public int Prop { get; } = 10;這樣做時,會自動生成readonly後臺字段,並將其設置爲您爲屬性初始化選擇的值。

相關問題