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

C# 我们可以从.net中的私有基类型创建派生的公共类型吗?,c#,.net,oop,microsoft-metro,windows-runtime,C#,.net,Oop,Microsoft Metro,Windows Runtime,我知道这个问题听起来有点愚蠢,但我有这种情况 上下文 我正在创建两个背景任务(METRO应用程序、winRT),它们有许多共同之处。 现在我想要的是,一个定义公共功能的公共基类,以及从基类派生的两个任务 问题:后台任务应以WinMD为目标,在此模式下,无法创建非密封的公共类。如果我创建sealed,我就不能从它派生,如果我创建private,我就不能公开派生类型,因为base是private的 问题:实现所需功能的方法有哪些。(从私有基派生的公共类型)。一种方法是使用组合(而不是继承)你根本不能

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

上下文

我正在创建两个背景任务(METRO应用程序、winRT),它们有许多共同之处。 现在我想要的是,一个定义公共功能的公共基类,以及从基类派生的两个任务

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


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

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

请注意,如果您只给它内部构造函数,那么其他代码将无法实例化它或创建自己的派生类型。。。在那一点上曝光有什么问题

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

无法创建非密封的公共类

因此:

  • 你能把所有涉及的类型都做成内部的吗
  • 你能把它变成一个公共抽象类吗?(WinMD允许吗?)
(如果您有任何关于WinMD中允许的内容的其他文档,那将非常有用。)


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

您就是不能。NET不允许您使派生类型比基类型更易于访问。您必须公开基类型

请注意,如果您只给它内部构造函数,那么其他代码将无法实例化它或创建自己的派生类型。。。在那一点上曝光有什么问题

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

无法创建非密封的公共类

因此:

  • 你能把所有涉及的类型都做成内部的吗
  • 你能把它变成一个公共抽象类吗?(WinMD允许吗?)
(如果您有任何关于WinMD中允许的内容的其他文档,那将非常有用。)


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

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

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

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

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