我仍在尝试将我的深层次和旧的知识从C / C ++映射到我更为浅薄的.Net知识。今天,时间已经变成了“as”(并隐含地“是”和演员)在C#中。
我的“as”的心理模型是它是QueryInterface
或dynamic_cast
(带有指针参数的dynamic_cast
,而不是引用,即C#。我的问题有两方面:
QueryInterface
相比,”as“的相对成本是多少?答案 0 :(得分:4)
是的,比较是公平的,特别是在处理指针时。三者中的每一个都成功并返回目标类型的非空指针,或返回null。
在.NET中使用COM对象时,实际上可以使用as
运算符,使其等同于QueryInterface
,并且托管/ COM互操作的开销很小。在CLR内部(在托管类型之间进行转换),与COM中的as
或C ++中的QueryInterface
相比,dynamic_cast
运算符极轻量级。对于我的代码中我 因为某些原因使用动态转换的所有位置,我从未见过as
运算符在分析中显示一个样本 - 并考虑我维护一个实现一个动态类型的运行时绑定语言(StringTemplate),我认为这意味着什么。 :)