c# - 如何防止一个类被库外继承,同时被公共类继承?
问题描述
假设我在库中有以下类
public abstract class HiddenBaseClass
{
//stuff
}
public abstract class ClassA : HiddenBaseClass
{
//stuff
}
public abstract class ClassB : HiddenBaseClass
{
//stuff
}
我想防止HiddenBaseClass
在图书馆之外被继承,但我确实想要ClassA
并且ClassB
被继承。我不能做HiddenBaseClass
一个internal class
,因为那意味着HiddenBaseClass
比ClassA
和更难访问ClassB
。
有没有解决的办法?
解决方案
与对问题的评论相反,我相信这种情况是有道理的,如果HiddenBaseClass
有一些你需要在内部实现的方面(因为你信任内部实现),但要公开其他抽象操作以供外部代码实现。它可能不适合您的用例,但并非不合理。
一种简单的方法是让它不可能直接在同一个库之外继承它是给它一个内部构造函数:
public abstract class HiddenBaseClass
{
// Only classes in the same assembly can chain to this constructor.
internal HiddenBaseClass() {}
}
只要类中的所有构造函数都是内部的(或私有受保护的或私有的),这将阻止其他程序集中的类将其构造函数链接到基类构造函数,从而防止继承。