为什么不能只读取属性

为什么C#中的属性不能只读?

当我尝试只读一个属性时,它表明:

修饰符’readonly’对此项无效

Simmilar问题在这里被问到: 为什么属性不能只读? 但问题是在5年前提出的,然后提供的答案是:因为他们没有想到它。 5年后仍然如此吗?

编辑:代码示例:

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

属性可以只在C#中读取,实现只是不使用readonly关键字:

如果使用C#6(VS 2015),则可以使用以下行,该行允许在构造函数或成员定义中分配属性。

 public int Property { get; } 

如果您使用较旧的C#/ Visual Studio版本,则可以编写类似这样的内容,并在构造函数或字段定义中指定字段:

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

具有out set的属性被视为C#的只读属性,您无需使用只读关键字指定它。

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

VB你必须指定: Public ReadOnly Property HelloText() As String

如果你想保持属性只读,你可以像这样定义他们的getter:

 public MyProperty { get; } 

如果您在C#中使用 googled 只读属性 ,那么您将获得100 * no_of_answers_here正确的结果。

https://msdn.microsoft.com/en-us/library/w86s7x04.aspx明确指出,没有set accessor的属性是readonly。 因此,认为另外应用readonly关键字会导致冗余,这是合乎逻辑的。

此外,直到C#6.0,即使使用包含类型(例如, class ),也无法设置readonly属性。 在C#6.0中,您至少可以将其作为初始化的一部分。 这意味着可以在C#6.0中使用public int Prop { get; } = 10; public int Prop { get; } = 10; 执行此操作时,将自动生成readonly后备字段并将其设置为您为属性初始化选择的值。

或多或少,从C#6可以使用这样的东西:

 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"; } }