2011-06-22 35 views
3

我曾在一本书中看到这样一句话:什么是“.Net身份”?

“默认实现equals()方法中,通过 System.Object的,使用由.NET身份 比较确定。”

.Net标识是指为引用类型和值类型都分配在内存中的内存地址吗?

+0

包括整个段落 – jgauffin

+0

哪本书是从哪里来的? – CodesInChaos

+0

Manning NHibernate in Action,第106页。 – pencilCake

回答

1

From MSDN:

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

它回答你的问题吗?

0

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

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

的Equals的默认实现支持引用相等而已,但派生类可以覆盖此方法,以支持值相等。

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

因此,对于参考类型,除非它们覆盖Equals,则比较参考 - 即“这是否指同一对象”。对于值类型,将比较整个值。

0

如果一个类的两个实例实际上是相同的实例(相同的内存位置),则它们是“相同的”。
默认实现恕我直言,拨打Object.ReferenceEquals

如果两个结构的值都相等,则表示它们是按位相同的,它们是“相同的”。
这里的默认实现使用refletion来比较所有成员恕我直言。

但是,这两种行为都可以使用Equals方法覆盖。

+1

默认实现不调用ReferenceEquals,它调用RuntimeHelpers.Equals,它直接在CLR中实现 –