Рассмотрим:Почему поля только для чтения могут быть изменены с помощью параметров ref?
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
методу, и его действительно можно манипулировать.
Это опасно? Зачем? Мне это кажется нехорошо, но я не могу на это положиться.
Поскольку значение, которое только для чтения и не может быть написана уже существует, то 'default'. Полезная переменная 'readonly' * должна быть записана хотя бы один раз. Не столь очевидная деталь заключается в том, что инициализация поля фактически происходит в конструкторе, компилятор C# перемещает код. –