我仍在尝试将我深厚的旧知识从 C/C++ 映射到我较浅的 .Net 知识。今天是时候在 C# 中使用“as”(隐含地“is”和 cast)了。
我对“as”的心理模型是,它是一个QueryInterface
或dynamic_cast
(一个带有指针参数的dynamic_cast
,而不是引用,也就是说) 对于 C#。我的问题有两个方面:
- 我的比较公平吗?
- 与
QueryInterface
或dynamic_cast
相比,“as”的相对成本是多少?
最佳答案
是的,比较是公平的,尤其是在处理指针时。这三个中的每一个要么成功并返回目标类型的非空指针,要么返回 null。
您实际上可以使用
as
在 .NET 中使用 COM 对象时的运算符,相当于QueryInterface
托管/COM 互操作的开销很小。在 CLR 内部(托管类型之间的转换),as
与QueryInterface
相比,运算符非常轻量级在 COM 或dynamic_cast
在 C++ 中。对于我代码中出于某种原因不得不使用动态转换的所有地方,我从未见过as
运算符甚至在分析中显示一个示例 - 考虑到我维护了一种动态类型的运行时绑定(bind)语言(StringTemplate)的实现,我认为这意味着什么。 :)
关于c# - 与 COM 中的 QueryInterface 或 C++ 中的 dynamic_cast 相比, "as"的成本是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1818666/