【问题标题】:What are the Component Object Model(COM) style behaviors/restrictions exhibited by WinRT typesWinRT 类型表现出的组件对象模型 (COM) 样式行为/限制是什么
【发布时间】:2016-10-13 12:55:42
【问题描述】:

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

我读到 WinRT 类型受 COM 样式限制。通过以下互联网搜索,我能够获得一些限制:

  • 默认情况下,WinRT 类型必须按照本文here 中的要求进行密封。
  • 它们对继承和泛型提供有限的支持,因为它只支持接口继承,但不支持实现继承,正如本文here 中接受的答案中所建议的那样。

有人可以帮助我解决对 COM 类型施加的一些良好的高级限制,或者可以将我指向一些好的资源,在那里我可以获得关于此的详尽信息。我尝试了很多谷歌搜索,但没有任何帮助。

【问题讨论】:

    标签: c# com windows-runtime


    【解决方案1】:

    查看Restriction and Rules part of Wikipedia article

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

    基本类型

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

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

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

    字符串

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

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

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

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

    将 undefined 从 JavaScript 传递给 WinRT 时会出现类似的结果

    结构

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

    JavaScript 不直接支持结构。

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

    参考文献

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

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

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

    数组

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

    在 WinRT 中,数组是值类型。

    活动

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

    在 JavaScript 中,addEventListener 函数或设置 on 属性用于订阅事件。

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

    收藏

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

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

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

    方法重载

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

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

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

    异步

    所有 WinRT 方法的设计都使得任何方法花费的时间都超过 50 毫秒是一种异步方法。

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

    【讨论】:

      猜你喜欢
      • 2020-12-23
      • 1970-01-01
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      • 2018-09-23
      • 1970-01-01
      相关资源
      最近更新 更多