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