2012-05-08 30 views
0

我知道这个问题听起来有些愚蠢,但我有这种情况。我们可以从.net中的私有基类型创建派生的公共类型吗?

语境

我创建2个后台任务(METRO应用,WinRT的),它有很多共同点的部分。 现在我想要的是定义公共功能的通用基类,以及从基类派生的2个任务。

问题:后台任务应该针对WinMD,并且在这种模式下,不可能创建非密封的公共类。如果我创建密封,我不能从它派生,如果我创建私人,我不能公开派生类型,因为基地是私人的。

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

回答

4

你根本不能。 .NET不允许您使派生类型比基类型更易于访问。你将不得不公开基类型。

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

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

,不可能创建非密封的公共类

所以:

  • 你能否让全部涉及内部的类型?
  • 你能把它公开吗摘要 class? (不WinMD允许?)

(如果你周围有什么是允许的WinMD任何其他文件,这将是有益的。)

如果你允许出口的界面,或许你可以有你的基类和派生类内部,但使它们实现公共接口。然后在公共静态类中使用公共静态方法来创建这些内部类型的实例,并通过接口返回它们。再说一遍,我不知道这是否被允许 - 如果你有任何关于WinMD允许的文档的链接,那对于我们这些没有进行WinRT开发的人来说是有用的。

0

是的,你可以在派生类中隐藏起来,然后露出base.Property,即

new public ScrollBar HorizontalScrollBar 
    { 
     get { return base.HorizontalScrollBar; } 
    } 
相关问题