Rah*_*han 5 .net c# inheritance readonly readonly-collection
我正在编写一个库,我们公司的其他开发人员将使用该库。状态机基类有一些ReadOnlyCollection<T>允许的状态等。开发人员需要继承该类并设置允许的状态。
我想限制它们在其派生类的构造函数中初始化ReadOnlyCollection<T>,并且以后无法修改它。
如果我在基类中将 声明ReadOnlyCollection<T>为只读属性,则该属性不起作用,因为无法在派生类的构造函数中对其进行修改。
我认为这种情况并不少见。有什么优雅的方式来实现这一点,让开发人员重写ReadOnlyCollection<T>?
不要让它们自行初始化。让你的基类构造函数将集合作为参数:
public class BaseClass
{
protected readonly Collection someObject;
public BaseClass(Collection object)
{
someObject = object
}
}
Run Code Online (Sandbox Code Playgroud)
因此,现在当调用派生类构造函数时,它还应该使用集合对象调用基类构造函数,否则将出现编译时错误。这将确保集合在构造函数中初始化,而不是在其他地方初始化。
public class Derivedclass : BaseClass
{
public DerivedClass() : base(/*pass the collection object here*/)
{
}
}
Run Code Online (Sandbox Code Playgroud)
这仍然有一个陷阱,如果你获得了集合的引用,你仍然可以通过调用派生类中集合的 Add 或 remove 方法来修改集合,唯一的问题是如果它是只读的,你无法重新初始化。