我们可以从 .net 中的私有基类型创建派生的公共类型吗?

本文关键字:类型 派生 创建 基类 net 我们 | 更新日期: 2023-09-27 18:33:24

我知道这个问题听起来有点愚蠢,但我有这种情况。

上下文

我正在创建 2 个后台任务(METRO 应用程序、winRT(,它们有很多共同点。现在我想要的是,一个定义公共功能的公共基类,以及从基类派生的 2 个任务。

问题:后台任务应以 WinMD 为目标,在此模式下,无法创建非密封的公共类。如果我创建密封,我不能从中派生,如果我创建私有,我不能公开派生类型,因为 base 是私有的。

关注点:实现所需功能的方法是什么。(从私有基础派生公共类型(。 一种方法可能是使用组合(而不是继承(

我们可以从 .net 中的私有基类型创建派生的公共类型吗?

你根本做不到。 .NET 不允许使派生类型比基类型更易于访问。必须公开基本类型。

请注意,如果您只为其提供内部构造函数,则其他代码将无法实例化它或创建自己的派生类型......在这一点上暴露它有什么问题?

编辑:好的,我刚刚重读了这个问题,并看到了这个:

无法创建非密封的公共类

所以:

  • 你能把所有涉及的类型都放在内部吗?
  • 你能把它变成一个公开的抽象课吗?(WinMD允许吗?

(如果你有关于 WinMD 中允许的内容的任何其他文档,那将很有用。

如果允许导出接口,也许可以将基类和派生类放在内部,但使它们实现公共接口。然后在公共静态类中使用公共静态方法来创建这些内部类型的实例,并通过接口返回它们。同样,我不知道这是否被允许 - 如果您有任何指向有关 WinMD 中允许的内容的文档的链接,这对我们这些没有做过任何 WinRT 开发的人来说很有用。

是的,您可以将其隐藏在派生类中,然后公开base.Property,即

new public ScrollBar HorizontalScrollBar
    {
        get { return base.HorizontalScrollBar; }
    }