什么是RuntimeTypeHandle和Type之间的区别?

Dan*_*nor 16 .net c# reflection

为什么我会在代码中使用一个而不是另一个?

Ryt*_*mis 10

警告:此答案似乎已过时.它是在.NET 4可用之前发布的,显然引入了一些优化Type,因此在这个答案中提供的信息已经过时了.有关详细信息,请参阅此最新答案.

根据Vance Morrison的这篇博文(2006年),RuntimeTypeHandle是一个struct包含非托管指针的值类型(),因此Type.GetTypeHandle(obj).Equals(anotherHandle)更快地用于严格的"完全相同类型"比较obj.GetType().Equals(anotherType)- 后者创建的System.Type实例显然是,更重.

然而,它也不太明显,并且肯定属于"微优化"类别,所以如果你想知道什么时候需要一个,你应该只使用System.Type.


小智 6

在.NET 4.0 Beta 1中RuntimeTypeHandle只是包装RuntimeType.似乎使用它作为廉价Type代理的所有好处都已消失.

上述索赔的证据: