Windows 运行时组件中不可能继承?

Inheritance impossible in Windows Runtime Component?

场景:
我的 Windows 运行时组件项目中有 3 classes (A,B,C)。

class A{}
public sealed class B : A {}
public sealed class C : A {}

编译上述代码时,我得到以下 错误

"Inconsistent accessibility: base class 'A' is less accessible than class 'C'."

如果我将 class 设为 public,它会出现 编译错误 :

"Exporting unsealed types is not supported. Please mark type 'MyProject.A' as sealed."

但是现在,如果我把A设为sealed,那么B和C就不能继承了。

考虑到只允许继承 WinRT 类型这一事实,是否可以使用 custom/user-defined classes 进行继承?如果没有,是否有任何解决方法来实现相同的目标?

正如您自己发现的那样,您不能在 Windows 运行时组件中公开从其他人继承的 classes;即使您尝试使用抽象 class 作为父级 class,也是如此。 这是使 WinRT 组件与 WinRT 框架支持的所有其他语言一起工作所需的 "drawback"。 解决此问题的唯一方法是避免继承。 您只能在可以模拟继承行为的地方使用接口或对象组合,例如:

public sealed class A
{
    public void Method() { }
}
public sealed class B
{
    A a;

    public void Method()
    {
        // Do B stuff

        // Call fake "virtual" method
        a.Method();
    }
}