【发布时间】:2012-01-09 01:57:33
【问题描述】:
这两个文档页面似乎在这个主题上相互矛盾:
- ValueType.Equals Method 说“Equals 方法的默认实现使用反射来比较 obj 和这个实例的对应字段。”
- Object.Equals Method (Object) 说“Equals 的默认实现支持引用类型的引用相等,以及值类型的按位相等。”
那么是按位相等还是反射?
看了ValueType的源码,发现有评论说
//如果这个对象没有GC引用我们可以避免反射
// 做一个快速的 memcmp
有人能解释一下“GC 引用”是什么意思吗?我猜这是一个具有引用类型的字段,但我不确定。
如果我创建一个只有值类型字段的struct,它的实例是否总是以快速的方式进行比较?
更新:.Net 4.5 的文档得到了显着改进:它没有提到的矛盾,现在可以更好地理解默认值类型相等检查的工作原理。
【问题讨论】:
-
虽然这不能回答你的问题,但同样值得注意的是值类型应该覆盖 Equals 和 operator equals。 msdn.microsoft.com/en-us/library/ms182276.aspx
-
我正要问同样的问题;)