CS0106 编译错误:只读属性和 getter



这可能看起来很愚蠢,但我想知道为什么以下代码会给我 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); 
        }
    }
}

最新更新