如何防止类在被公共类继承的同时被库外继承?
c#
假设我在库中有以下类
public abstract class HiddenBaseClass
{
//stuff
}
public abstract class ClassA : HiddenBaseClass
{
//stuff
}
public abstract class ClassB : HiddenBaseClass
{
//stuff
}
我想防止HiddenBaseClass在图书馆外被继承,但我确实想要ClassA并被ClassB继承。我不能做HiddenBaseClassan internal class,因为那意味着HiddenBaseClass比ClassAand更不容易访问ClassB。
有没有解决的办法?
回答
相反,关于这个问题的评论,我认为这种情况可能是有意义的,如果HiddenBaseClass有问题,你需要依靠的是内部实现(因为你信任的内部实现),但暴露的其他抽象操作外部代码来实现。它可能不是适合您的用例的设计,但并非不合理。
使其无法在同一个库之外直接从它继承的一种简单方法是给它一个内部构造函数:
public abstract class HiddenBaseClass
{
// Only classes in the same assembly can chain to this constructor.
internal HiddenBaseClass() {}
}
只要类中的所有构造函数都是内部的(或私有受保护的,或私有的),这将阻止其他程序集中的类将其构造函数链接到基类构造函数,从而阻止继承。
- @Transcendent: That wouldn't help with code reuse though. My answer *does* still keep the abstract class public - it's only the *constructor* that's internal.