9.了解四个相等判断的用法
Object.ReferenceEquals(Object left,Object right) :判断两个对象的ID是否相同。
Object .Equals(Object left,Object right):当不知道两个对象的类型时判断这两个对象是否相同,它是原理是基于“==”和第一个对象的Equals()。
实例的Equals(Object right)方法:
原则是不管什么时候,在创建一个值类型时重载Equals()方法,并且你不想让引用类型遵从默认引用类型 的
语义时也重载Equals(),就像System.Object定义的那样 。当你写你 自己的Equals() 时,遵从要点里实现的内
容。重载Equals()就意味着你应该重写GetHashCode()
标准模式:
public class Foo
{
public override bool Equals( object right )
{
// check null:
// the this pointer is never null in C# methods.
if (right == null)
return false;
if (object.ReferenceEquals( this, right ))
return true;
// Discussed below.
if (this.GetType() != right.GetType())
return false;
// Compare this type's contents here:
return CompareFooMembers(
this, right as Foo );
}
}
另一种方法是派生类的Equals中都调用基类的Equals.
给了你 4 种方法来检测相等性,但你只须要考虑为其中两个提供你 自己的方法。你决不应该重载静态 的
Object.ReferenceEquals()和静态 的Object.Equals(),因为它们提供了正确的检测,忽略运行时类型 。你应该
为了更好的性能而总是为值类型实例提供重载的Equals()方法和操作符==() 。当你希望引用类型 的相等与对
象ID 的相等不同时,你应该重载引用类型实例 的Equals()