c# - 与 COM 中的 QueryInterface 或 C++ 中的 dynamic_cast 相比, "as"的成本是多少?

标签 c# c++ casting type-inference

我仍在尝试将我深厚的旧知识从 C/C++ 映射到我较浅的 .Net 知识。今天是时候在 C# 中使用“as”(隐含地“is”和 cast)了。

我对“as”的心理模型是,它是一个QueryInterfacedynamic_cast(一个带有指针参数的dynamic_cast,而不是引用,也就是说) 对于 C#。我的问题有两个方面:

  1. 我的比较公平吗?
  2. QueryInterfacedynamic_cast 相比,“as”的相对成本是多少?

最佳答案

  1. 是的,比较是公平的,尤其是在处理指针时。这三个中的每一个要么成功并返回目标类型的非空指针,要么返回 null。

  2. 您实际上可以使用 as在 .NET 中使用 COM 对象时的运算符,相当于 QueryInterface托管/COM 互操作的开销很小。在 CLR 内部(托管类型之间的转换),asQueryInterface 相比,运算符非常轻量级在 COM 或 dynamic_cast在 C++ 中。对于我代码中出于某种原因不得不使用动态转换的所有地方,我从未见过 as运算符甚至在分析中显示一个示例 - 考虑到我维护了一种动态类型的运行时绑定(bind)语言(StringTemplate)的实现,我认为这意味着什么。 :)

关于c# - 与 COM 中的 QueryInterface 或 C++ 中的 dynamic_cast 相比, "as"的成本是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1818666/

相关文章:

c# - 在 C# 中的应用程序之间传递信息

c# - 在文本文件中写入,不覆盖,在 C# 中

c# - 如何将安全 header 添加到 SOAP 消息?

c++ - Opengl视频纹理

C# 通过引用 C++ ActiveX 控件传递 int 和字符串 : type mismatch

c - 以下哪一种是设置无符号整数最大值的更便携的方法?

java - 促进原始类型

c# - 为索引属性创建模板

c++ - 来自模板类的模板特化

java - 创建实用程序以将对象转换为 java 中的 bean