Assert.AreEqual和Assert.AreSame有什么区别?
我搜索了FCL的源代码,我对此string.Equals()使用感到困惑Object.ReferenceEquals(),并Object.ReferenceEquals()使用==operator to jugde.然后我找不到如何==定义运算符.
那么原始运算符在哪里定义?
这两个文档页面似乎与此主题相矛盾:
它是按位平等还是反思?
我瞥了一眼源代码,ValueType发现评论说
//如果此对象中没有GC引用,我们可以避免反射
//并做一个快速的memcmp
有人可以澄清"GC参考"的含义吗?我想这是一个有引用类型的字段,但我不确定.
如果我创建一个struct只有值类型字段,那么它的实例是否总是与快速方式进行比较?
更新: .Net 4.5的文档已得到显着改进:它没有提到的矛盾,现在可以更好地理解默认值类型相等性检查的工作原理.
我在ILDASM和Reflector中挖掘,发现:
这个问题告诉我如何找出InternalEquals是如何实现的,即在.cpp类中(或者在CLR中的某个地方).
我的问题是:
ceq成为什么?另一个.cpp类中的另一种方法?即它们是完全不同的代码?因此,虽然==和Equals的默认行为看起来是相同的,但它是不同的代码?