CS0106 compile error: readonly property and getter

CS0106 compile error: readonly property and 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 的 属性 getter 的计算从逻辑的角度来看看起来很尴尬。

P.S。 get 中的代码没有实际意义 - 它只是一个 "something that reads the _value"

更新

简而言之,最初我认为使用 readonly 关键字创建只读 属性 是很合逻辑的。 我错过了 Microsoft 文档中有关 readonly 属性 的主要内容:

The readonly keyword is a modifier that you can use on fields.

没有讽刺... 你会得到一个编译错误,因为它不是语言语法的一部分。

首先,由于只有 get,那么您已经在制作 属性 "readonly"。

其次,您需要将 属性 视为围绕两个方法的语法糖 int getValue()void setValue (int)。将方法设置为 "readonly" 是否有意义?

第三,将 属性 设置为只读是没有意义的,因为作为构造的 属性 未映射到内存中的任何内容。请参阅上一点,它基本上是一种编写(最多)两种方法的好方法。

只为 属性 实现 Get 就像是只读的。所以如果你想实现类似的行为,下面是工作代码。

class MyClass
{
    private readonly int _value = -5; // < some value> or<set it in the constructor>;
    private int ReadableValue
    {
        get
        {
            return Math.Abs(_value); 
        }
    }
}