如果您有一个变量在对象实例化时已知且之后不应更改,应使用只读字段。
然而,在子类的构造函数中不允许给只读字段赋值。 即使超类是抽象的,这也行不通。
是否有人能好好解释一下为什么这不是个好主意,或者为什么C#语言中缺少此功能?
abstract class Super
{
protected readonly int Field;
}
class Sub : Super
{
public Sub()
{
this.Field = 5; //Not compileable
}
}
提示:你当然可以通过在超类中的受保护的构造函数中分配只读字段来达到相同的结果。
错误 68:只读字段不能被赋值(除了在构造函数或变量初始化器中)
。 - nicodemus13