RuntimeTypeHandle 和 Type 有什么区别?
-
09-06-2019 - |
题
为什么我要在代码中使用其中一种而不是另一种?
解决方案
警告:这个答案似乎已经过时了。 它是在 .NET 4 可用之前发布的,显然引入了一些关于
Type
从而使这个答案中的信息变得过时。看 这个最近的答案 了解详情。
根据 这篇博文(2006 年),作者:Vance Morrison, RuntimeTypeHandle
是一个值类型(struct
) 包装了一个非托管指针,所以 Type.GetTypeHandle(obj).Equals(anotherHandle)
用于严格的“完全相同类型”比较比 obj.GetType().Equals(anotherType)
——后者创造了 System.Type
显然,这些实例更重。
然而,它也不太明显,并且肯定属于“微优化”类别,因此如果您想知道何时需要其中一个,那么您可能应该只使用 System.Type。
其他提示
在 .NET 4.0 Beta 1 中 RuntimeTypeHandle
只是包裹 RuntimeType
. 。看来使用它的所有好处都是便宜的 Type
代理已经走了。
上述主张的证据:
- 微软的 参考来源
System.RuntimeTypeHandle
类型 表明这个类型确实只是一个包装器System.RuntimeType
这些日子。 - Sandro Magi 2013 年的博客文章“CLR:动态类型测试的成本” 包含一个基准测试和最后的注释,显示了假定的性能优势
RuntimeTypeHandle
在 .NET 4 中消失了。
不隶属于 StackOverflow