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

时间:2012-05-08 06:19:47

标签: c# .net oop microsoft-metro windows-runtime

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

上下文

我正在创建2个后台任务(METRO apps,winRT),这些任务有很多共同之处。 现在我想要的是,定义通用功能的公共基类,以及从基类派生的2个任务。

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

关注:实现所需功能的方法有哪些。 (来自私人基地的派生公共类型)。一种方法可以是使用Composition(而不是继承)

2 个答案:

答案 0 :(得分:4)

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

请注意,如果您只给它内部构造函数,那么其他代码将无法实例化它或创建自己的派生类型...那时暴露它的问题是什么?

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

  

无法创建非密封的公共类

所以:

  • 你能否所有内部涉及的类型?
  • 你能把它变成一个公共抽象类吗? (WinMD允许这样做吗?)

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

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

答案 1 :(得分:0)

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

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