这可能看起来很愚蠢,但我想知道为什么以下代码会给我 CS0106 编译时错误:
error CS0106: The modifier 'readonly' is not valid for this item
代码:
class MyClass
{
private readonly int _value
{
get
{
if (_value < 0)
return -1 * _value;
return _value;
}
}
在我的理解中,我get
内部没有做错任何事,因为我只是阅读了值。我同意从逻辑的角度来看,readonly
的属性获取器的计算看起来很尴尬。
附言get
里面的代码没有实际意义——它只是一个"读取_value
的东西">
更新
简而言之,最初我认为使用readonly
关键字创建只读属性是非常合乎逻辑的。我错过了Microsoft文档中可用的readonly
属性的主要内容:
readonly 关键字是可用于字段的修饰符。
没有讽刺...您会收到编译错误,因为它不是该语言语法的一部分。
首先,根据只有get
的性质,那么您已经使属性"只读"。
其次,您需要将属性视为围绕两种方法的句法糖 int getValue()
和void setValue (int)
.将方法设置为"只读"是否有意义?
第三,将属性设置为只读没有意义,因为作为构造的属性不会映射到内存中的任何内容。请参阅上一点,了解它基本上是编写(最多(两种方法的好方法。
仅实现属性的 Get 就像已经只读一样。 因此,如果您想实现类似的行为,下面是工作代码。
class MyClass
{
private readonly int _value = -5; // < some value> or<set it in the constructor>;
private int ReadableValue
{
get
{
return Math.Abs(_value);
}
}
}