如何控制哪些可以在程序集外部派生,哪些不能在程序集之外派生
本文关键字:程序集 派生 外部 不能 何控制 控制 | 更新日期: 2023-09-27 17:54:11
假设我有一个基类B
,它必须从程序集中导出。有两个类,D1
和D2
派生自B
,我希望它们是唯一派生自它的类
- 使
B
在组件外部可见 - 不允许派生或实例化
B
- 导出
D1
和D2
,并禁止从它们派生
为什么?比方说,我需要外部类提供一个B
s的列表,它只能由D1
s或D2
s组成。
我该怎么做?
解决方案是:
- 将
B
公开化、抽象化 - 使
B
的所有构造函数为internal
- 将
D1
和D2
密封
Noone将能够从B
派生,因为他将不能调用B
的构造函数。D1
和D2
的衍生产品将不可用,因为它们是密封的。但所有类都将在程序集之外提供,因为它们是公共的。
public abstract class B
{
internal B()
{
}
}
public sealed class D1 : B
{
}
public sealed class D2 : B
{
}