为什么可以';t只能与属性一起使用
本文关键字:属性 一起 为什么 | 更新日期: 2023-09-27 18:26:20
为什么C#中的属性不能是只读的?
当我尝试使属性只读时,它会声明:
修饰符"只读"对此项无效
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; }}
如果你想让属性保持只读,你可以这样定义它们的getter:
public MyProperty { get; }
没有set的属性在C#
中被视为只读属性,您不需要使用Readonly关键字来指定它们。
public class GreetingClass
{
private string _HelloText = "some text";
public string HelloText => _HelloText;
}
而在VB
中,您必须指定:Public ReadOnly Property HelloText() As String
如果您在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
后备字段,并将其设置为您为属性初始化选择的值。
或多或少,从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"; }
}