Учитывая этот класс ...Compiler-Реализована Неизменность в .Net
public class Test
{
private long _id;
public Test(long id)
{
_id = id;
}
}
Будет ли компилятор .Net компилировать как ...
public class Test
{
private readonly long _id;
public Test(long id)
{
_id = id;
}
}
Другими словами, он понимает, что _id только когда-либо установлен из конструктора и, следовательно, является только для чтения?
Это немного вводит в заблуждение и на самом деле не отвечает на вопрос. Рассмотрим «противоположную» ситуацию, когда у вас есть поле «private readonly»: компилятор * знает, пытается ли вы установить это поле из любого места, кроме объявления/конструктора, но также нет ничего, что могло бы помешать вам установить его из другого места, используя отражение , Если компилятор может проверить использование 'private readonly' полей, тогда нет (теоретической) причины, по которым он не смог бы проверить использование полей, отличных от 'readonly'. – LukeH