如何控制哪些可以在程序集外部派生,哪些不能在程序集之外派生

本文关键字:程序集 派生 外部 不能 何控制 控制 | 更新日期: 2023-09-27 17:54:11

假设我有一个基类B,它必须从程序集中导出。有两个类,D1D2派生自B,我希望它们是唯一派生自它的类

  • 使B在组件外部可见
  • 不允许派生或实例化B
  • 导出D1D2,并禁止从它们派生

为什么?比方说,我需要外部类提供一个Bs的列表,它只能由D1s或D2s组成。

我该怎么做?

如何控制哪些可以在程序集外部派生,哪些不能在程序集之外派生

解决方案是:

  • B公开化、抽象化
  • 使B的所有构造函数为internal
  • D1D2密封

Noone将能够从B派生,因为他将不能调用B的构造函数。D1D2的衍生产品将不可用,因为它们是密封的。但所有类都将在程序集之外提供,因为它们是公共的。

public abstract class B
{
    internal B()
    {
    }
}
public sealed class D1 : B
{
}
public sealed class D2 : B
{
}