为什么不能只读取属性
为什么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"; } }