Рассмотрим:
class Foo
{
private readonly string _value;
public Foo()
{
Bar(ref _value);
}
private void Bar(ref string value)
{
value = "hello world";
}
public string Value
{
get { return _value; }
}
}
// ...
var foo = new Foo();
Console.WriteLine(foo.Value); // "hello world"
Как это вообще компилируется, тем не менее, работает? Я не должен был бы назначать другое значение в поле _value
вне конструктора, так как он помечен readonly
. Однако передайте его методу ref
, и его можно действительно манипулировать.
Это опасно? Зачем? Мне это кажется нехорошим, но я не могу на него положиться.