WinRT不允许自定义泛型类型或接口的原因

本文关键字:接口 不允许 自定义 泛型类型 WinRT | 更新日期: 2023-09-27 18:26:18

在这里和Build甲板上阅读了一些关于WinRT的内容后,有人能阐明导致他们禁止我们通过自己的IFoo<T> ,但他们这样做是为了他们自己认可的通用接口类型?

WinRT必须有一个描述、解析和传递泛型参数的机制,或者围绕这个机制进行一些花哨的修改以供自己使用。

我无法想象以非通用的方式"扁平化"我的一些C#类实用程序库,我主要想从C++中使用这些库,而不是从JS中使用。

我想要一流的Intellisense和API支持,就像您为自己的MS类型所做的一样。

所以。。。为什么我们不能使用上述机制呢?这可能会在以后放松和允许吗?还是这是一个永久性的限制?或者这是由于语言投影层本身自定义处理特定的泛型类型,而没有任何泛型类型通用的WinRT集中元处理?

谢谢。

WinRT不允许自定义泛型类型或接口的原因

在幕后,被投影为IXxx的类型是由所谓的"参数化接口"或"pinterfaces"实现的。每个语言投影都知道如何以自然和熟悉的方式表达内置的参数化接口——例如,CLR将IMap参数化接口投影为IDictionary。

语言投影(尤其是JS)不知道如何处理自定义参数化接口,所以它们是不允许的。

我们无法知道这一限制将来是否会放松,因为我们无法知道Windows将来会添加什么功能。

对于构建组件,还有两个优势

  • 组合扩展是组件的更好模型(请记住,您仍然可以使用接口进行测试(例如C#库),它们不能作为WinRT可导出组件公开

  • 没有跨COM调用边界的多态调用,因为不能内联的性能将是较差的

我不确定JS是否会限制这一点,因为JS无论如何都不能创建对象,只能消耗它们。它们可能会添加另一个JS限制——不支持框架接口。。