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()

posted on 2012-10-23 15:44  Q&A  阅读(140)  评论(0编辑  收藏  举报