相关疑难解决方法(0)

66
推荐指数
2
解决办法
2万
查看次数

在类"对象"中定义的==运算符在哪里?

我搜索了FCL的源代码,我对此string.Equals()使用感到困惑Object.ReferenceEquals(),并Object.ReferenceEquals()使用==operator to jugde.然后我找不到如何==定义运算符.

那么原始运算符在哪里定义?

.net c#

40
推荐指数
3
解决办法
2220
查看次数

在.NET 4.0中,值类型的Equals的默认实现是什么?

这两个文档页面似乎与此主题相矛盾:

它是按位平等还是反思?

我瞥了一眼源代码,ValueType发现评论说

//如果此对象中没有GC引用,我们可以避免反射

//并做一个快速的memcmp

有人可以澄清"GC参考"的含义吗?我想这是一个有引用类型的字段,但我不确定.

如果我创建一个struct只有值类型字段,那么它的实例是否总是与快速方式进行比较?

更新: .Net 4.5的文档已得到显着改进:它没有提到的矛盾,现在可以更好地理解默认值类型相等性检查的工作原理.

.net c# clr

27
推荐指数
1
解决办法
3093
查看次数

"ceq"MSIL命令和object.InternalEquals之间的区别

我在ILDASM和Reflector中挖掘,发现:

  1. ==被编译为"ceq"MSIL命令
  2. object.Equals保持原样
  3. object.Equals调用object.InternalEquals

这个问题告诉我如何找出InternalEquals是如何实现的,即在.cpp类中(或者在CLR中的某个地方).

我的问题是:

ceq成为什么?另一个.cpp类中的另一种方法?即它们是完全不同的代码?因此,虽然==和Equals的默认行为看起来是相同的,但它是不同的代码?

c# cil equals

3
推荐指数
1
解决办法
1363
查看次数

标签 统计

c# ×4

.net ×2

assert ×1

cil ×1

clr ×1

equals ×1