Поле readonly должно использоваться, когда у вас есть переменная, которая будет известна при обтекании объекта, которое впоследствии не должно изменяться.
Однако нельзя назначать поля readonly из конструкторов подклассов. Это даже не работает, если суперкласс является абстрактным.
Есть ли у кого-нибудь хорошее объяснение, почему это либо не очень хорошая идея, либо недостаток в С# languange?
abstract class Super
{
protected readonly int Field;
}
class Sub : Super
{
public Sub()
{
this.Field = 5; //Not compileable
}
}
PS: Вы можете, конечно, достичь того же результата, имея назначение полей readonly в защищенном конструкторе в суперклассе.