3

场景:
我的 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 类型的事实,是否可以使用自定义/用户定义的类进行继承?如果没有,是否有任何解决方法可以实现相同的效果?

4

1 回答 1

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();
    }
}
于 2016-03-31T13:48:48.590 回答