为什么C#中的属性不能只读取?
当我尝试只读一个属性时,它会声明:
修饰符'readonly'对此项无效
Simmilar问题在这里被问到: Why can't properties be readonly? 但问题是在5年前提出的,然后提供的答案是:因为他们没有想到它。 5年后仍然如此吗?
编辑: 代码示例:
public class GreetingClass
{
public readonly string HelloText { get; set; }
}
答案 0 :(得分:17)
属性可以只在C#中读取,实现只是不使用readonly关键字:
如果您使用C#6(VS 2015),您可以使用以下行,该行允许在构造函数或成员定义中分配属性。
public int Property { get; }
如果您使用较旧的C#/ Visual Studio版本,您可以编写类似这样的内容,并在构造函数或字段定义中指定字段:
private readonly int property;
public int Property { get { return this.property; }}
答案 1 :(得分:4)
如果你想保持属性只读,你可以像这样定义他们的getter:
public MyProperty { get; }
答案 2 :(得分:3)
没有设置的属性被视为C#
中的只读属性,您无需使用Readonly关键字指定它们。
public class GreetingClass
{
private string _HelloText = "some text";
public string HelloText => _HelloText;
}
VB
中的您必须指定:Public ReadOnly Property HelloText() As String
答案 3 :(得分:0)
或多或少,从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"; }
}
答案 4 :(得分:0)
如果您使用C#搜索了只读属性,那么您将获得 100 * no_of_answers_here 正确的结果。
https://msdn.microsoft.com/en-us/library/w86s7x04.aspx明确指出,没有set
访问者的属性是只读的。因此,认为另外应用readonly
关键字会导致冗余,而不是其他任何内容是合乎逻辑的。
此外,在C#6.0之前,即使使用包含类型(例如,readonly
),也无法设置class
属性。在C#6.0中,您至少可以将其作为初始化的一部分。这意味着可以在C#6.0,public int Prop { get; } = 10;
中执行此操作,自动生成readonly
支持字段并将其设置为您为属性初始化选择的值。