WinRT类型展示的组件对象模型(COM)样式行为/限制是什么

时间:2016-10-13 02:45:00

标签: c# com windows-runtime

众所周知,WinRT是Microsoft组件对象模型(COM)的增强版本。除了在十多年前管理分布式事务之外,我没有太多机会直接使用COM组件。我确信在操作系统级别内部使用了很多COM。

我读到的WinRT类型受到COM风格的限制。我可以通过互联网搜索获得一些限制,如下所示:

  • WinRT类型必须按照此帖here中的要求进行密封。
  • 它们对继承和泛型提供有限的支持,因为它只支持接口继承,但不支持实现继承,如本文here中接受的答案所示。

有人可以帮助我对COM类型施加一些好的高级别限制,或者可以指向一些好的资源,我可以在这里得到详尽的信息。我试过谷歌搜索但没有帮助。

1 个答案:

答案 0 :(得分:1)

检查Restriction and Rules part of Wikipedia article

  

由于Windows Runtime被投射到各种语言,有些语言   存在对基本数据类型的限制以便托管所有这些   语言。程序员必须小心这些行为   与公共访问一起使用时的类型(用于方法参数,方法   返回值,属性等。

     

基本类型

     

在.NET语言和C ++中,存在一组丰富的数据类型,   代表各种数字。

     

在JavaScript中,Number只能表示最多53位的精度。

     

在WinRT中,唯一缺少数字数据类型的是8位有符号整数   相对于.NET和C ++。 JavaScript开发人员必须小心   在为WinRT编码时处理大数字。

     

<强>字符串

     

字符串在.NET和JavaScript中是不可变的,但在C ++中是可变的。

     

C ++将作为字符串传递给WinRT的空指针转换为   空字符串

     

在.Net中,将作为字符串传递给WinRT的null转换为   空字符串

     

在JavaScript中,将作为字符串传递给WinRT的null转换为   一个单词null的字符串。这是因为JavaScript的关键字为null   被表示为空对象

     

从JavaScript

传递undefined到WinRT时会出现类似的结果      

<强>的Structs

     

在.NET和C ++中,结构是值类型,这样的结构可以   包含任何类型。

     

JavaScript不直接支持结构。

     

在WinRT中,只允许使用结构包含类型   具有值语义,包括数字,字符串和其他结构。   不允许使用指针或接口引用。

     

参考文献

     

在.NET中,对象通过引用传递,而数字和结构>按值传递。

     

在C ++中,所有类型都可以通过引用或值传递。

     

在WinRT中,接口通过引用传递;所有其他类型   通过价值传递。

     

数组

     

在.NET,C ++和JavaScript数组中是引用类型。

     

在WinRT中,数组是值类型。

     

活动

     

在.NET和C ++中,客户端使用+ =运算符订阅事件。

     

在JavaScript中,添加addEventListener函数或设置   property用于订阅事件。

     

在WinRT中,所有语言都可以使用自己的方式订阅事件。

     

<强>集合

     

某些.NET集合直接映射到WinRT集合。

     

WinRT Vector类型类似于数组,数组语法用于   消耗它们。

     

WinRT Map类型是一个键/值对集合,并被投影为   .NET语言中的字典。

     

方法重载

     

所有WinRT语言(.NET,C ++,JavaScript)都支持重载   参数

     

.NET和C ++也支持类型上的重载。

     

在WinRT中,只有参数号用于重载。

     

<强>非同步

     

所有WinRT方法都经过精心设计,任何方法都需要花费更长的时间   50毫秒是一种异步方法。

     

用于区分异步方法的既定命名模式是   异步。对于完整的运行时库,所有有机会的方法   持续时间超过50毫秒仅作为异步方法实现。