Windows运行时组件中无法继承?

时间:2016-03-31 13:30:12

标签: c# windows windows-runtime win-universal-app winmd

方案:
我的Windows运行时组件项目中有3个类(A,B,C)。

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

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

  

"不一致的可访问性:基类' A'不太容易接近   课程' C'。"

如果我将A类公开,则会出现编译错误

  

"不支持导出未密封的类型。请标记类型   ' MyProject.A'密封。"

但是现在,如果我把A封装起来,那么B和C就不能继承它。

考虑到只允许WinRT类型继承,是否可以使用自定义/用户定义的类进行继承?如果没有,是否有任何解决方法来实现相同的目标?

1 个答案:

答案 0 :(得分:1)

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

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();
    }
}