什么是“.Net身份”?

3

我在一本书中看到了这句话:

"Equals()的默认实现是由System.Object定义的,它使用.NET标识进行比较。"

.Net标识是否指分配给引用类型和值类型的内存中的内存地址?


Manning NHibernate实战,第106页。 - pencilCake
3个回答

1

来自 MSDN:

Equals 的默认实现对于引用类型支持引用相等性,对于值类型支持按位相等性。引用相等性意味着被比较的对象引用引用了同一个对象。按位相等性意味着被比较的对象具有相同的二进制表示。

这回答了你的问题吗?


0
在这种情况下,请查看官方文档。

http://msdn.microsoft.com/en-us/library/bsc2ak47(v=vs.80).aspx

Equals 的默认实现仅支持引用相等性,但派生类可以重写此方法以支持值相等性。

对于引用类型,相等性被定义为对象相等性;也就是说,引用是否指向同一对象。对于值类型,相等性被定义为按位相等。ValueType 类支持值类型。

因此,对于引用类型,除非它们重写了 Equals,否则将比较引用 - 即“这是否引用同一对象”。对于值类型,将比较整个值。


0

如果两个类的实例是同一个实例(相同的内存位置),则它们是“相同的”。
默认实现在我看来调用了 Object.ReferenceEquals

如果两个结构的值全部相等,即它们是按位相同的,则它们是“相同的”。
默认实现在我看来使用反射来比较所有成员。

但是,这两种行为都可以使用 Equals 方法进行重写。


1
默认实现不调用ReferenceEquals,而是调用RuntimeHelpers.Equals,该方法直接在CLR中实现。 - Thomas Levesque

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接