与COM中的QueryInterface或C ++中的dynamic_cast相比,“as”的成本是多少?

时间:2009-11-30 09:07:03

标签: c# c++ casting type-inference

我仍在尝试将我的深层次和旧的知识从C / C ++映射到我更为浅薄的.Net知识。今天,时间已经变成了“as”(并隐含地“是”和演员)在C#中。

我的“as”的心理模型是它是QueryInterfacedynamic_cast(带有指针参数的dynamic_cast,而不是引用,即C#。我的问题有两方面:

  1. 我的比较是公平的吗?
  2. 与“{1}}或QueryInterface相比,”as“的相对成本是多少?

1 个答案:

答案 0 :(得分:4)

  1. 是的,比较是公平的,特别是在处理指针时。三者中的每一个都成功并返回目标类型的非空指针,或返回null。

  2. 在.NET中使用COM对象时,实际上可以使用as运算符,使其等同于QueryInterface,并且托管/ COM互操作的开销很小。在CLR内部(在托管类型之间进行转换),与COM中的as或C ++中的QueryInterface相比,dynamic_cast运算符轻量级。对于我的代码中我 因为某些原因使用动态转换的所有位置,我从未见过as运算符在分析中显示一个样本 - 并考虑我维护一个实现一个动态类型的运行时绑定语言(StringTemplate),我认为这意味着什么。 :)