它可能看起来很愚蠢,但我想知道为什么以下代码会产生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关键字是您可以在字段上使用的修饰符。
答案 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);
}
}
}