【发布时间】:2019-12-13 04:25:08
【问题描述】:
我有一个类似下面的类结构
abstract class AMyAbstractClass {
public readonly int MyReadonlyField;
public int MyReadonlyProperty { get; }//read-only auto-property (syntactic sugar)
}
class MyConcreteClass : AMyAbstractClass {
MyConcreteClass() {
this.MyReadonlyField = 1;
this.MyReadonlyProperty = 1;
}
}
这会引发编译错误
不能将只读字段分配给(构造函数或变量初始化器除外)
和
无法将属性或索引器“AMyAbstractClass.MyReadonlyProperty”分配给 -- 它是只读的
分别。
在第一种情况下,错误消息是错误的,因为它是在构造函数中设置的!
我可以想出其他方法来获得不可变对象属性,但为什么不允许这种情况?这种封装有哪些好的做法?
【问题讨论】:
-
第一个错误消息可能有点不清楚,但您只需要在基类中创建一个构造函数(也可能是
protected)。 -
这是我在 Visual Studio 2017 中收到的逐字错误消息。
-
抽象类是否有构造函数在两种情况下都是一样的。
标签: c# constructor derived-class readonly-attribute