VS编译器不允许为WINMD类型库创建密封的公开类型。
为什么要设置此限制? (我知道密封类型的优点,我的问题是关于Win RT组件)。
答案 0 :(得分:4)
这是COM施加的架构限制。它位于任何WinRT类型的核心,它们来自IUnknown和IInspectable。 COM的问题是它只支持接口继承而不支持实现继承。这是一个强大的COM设计目标,实现继承过于充实的实现细节,包括臭名昭着的钻石问题。
有一种方法可以通过委托使继承工作,派生类中的每个方法都显式调用相应的基接口方法,但这样做非常痛苦。但是否则Windows.UI.Xaml类实现继承的方式。
答案 1 :(得分:1)
我认为原因是因为暴露的类型应该可以从所有不同类型的语言中使用(C#,C ++,JavaScript将来可能更多)。
因此,如果您有一个类,那么使用一个类就会将其重写为新类。我可以想要上课,这是用不同的语言完成的。但这是一个问题。你想如何通过在C ++中完成的继承类来覆盖在C#中完成的基类?这永远不会起作用,因为这两者都具有完全不同且不兼容的OOP实现。
通过强制暴露的类被密封,你可以解决这个问题,并确保人们不会尝试做这样的事情。
我确信还有比这更基本的东西,但这首先是我想到的。