CS0106编译错误:readonly属性和getter

时间:2016-04-07 20:56:44

标签: c# compiler-errors language-design

它可能看起来很愚蠢,但我想知道为什么以下代码会产生CS0106编译时错误

class MyClass { private readonly int _value { get { if (_value < 0) return -1 * _value; return _value; } }

代码:

get

根据我的理解,我在readonly内没有做任何错误,因为我刚读了这个值。 我同意get属性获取者的计算从逻辑角度看起来很尴尬。

P.S。 _value内的代码没有实际意义 - 它只是一个读取readonly&#34;

的内容

更新

总之,最初我认为使用readonly关键字创建只读属性是非常合理的。 我错过了Microsoft文档中提供的class Defendant(Model): full_name = None # Some default value first_name = None last_name = None type_of_appeal = None county = None case_number = None date_of_filing = None race = None sex = None dc_number = None hair_color = None eye_color = None height = None weight = None birth_date = None initial_receipt_date = None current_facility = None current_custody = None current_release_date = None link_to_page = None 属性的主要内容:

  

readonly关键字是您可以在字段上使用的修饰符。

2 个答案:

答案 0 :(得分:5)

没有讽刺...... 您收到编译错误,因为它不是该语言语法的一部分。

首先,只有get的性质,那么你已经制作了该物业&#34; readonly&#34;。

其次,您需要将属性视为围绕两种方法的语法糖 int getValue()void setValue (int)。将方法设置为&#34; readonly&#34;?

是否有意义

第三,将属性设置为readonly是没有意义的,因为作为构造的属性不会映射到内存中的任何内容。请参阅前一点,了解它是如何编写(最多)两种方法的好方法。

答案 1 :(得分:1)

仅实现Get for a property就像readonly一样。所以如果你想实现类似的行为,下面将是工作代码。

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