考虑:
_value
这是如何编译的,但仍有效?我不应该为构造函数之外的readonly
字段分配不同的值,因为它标有ref
。但是,将run() is also
{
start unit1.thread();
start unit2.thread();
unit3.thread();
};
传递给方法,确实可以对其进行操作。
答案 0 :(得分:19)
它编译是因为您只在构造函数中将值作为ref
参数传递(其中允许设置readonly
个字段)。如果您将对Bar()
的呼叫转移到其他方法,则会失败。
class Foo
{
private readonly string _value;
public Foo()
{
Bar(ref _value);
}
public void Baz()
{
Bar(ref _value);
}
private void Bar(ref string value)
{
value = "hello world";
}
public string Value
{
get { return _value; }
}
}
上面的代码提供了一个非常有说服力的编译器错误:
readonly字段不能传递给ref或out(构造函数除外)