C#中对象的相等性和同一性

  System.object类型提供了名为Equals的虚方法,其实现方式很简单:if(this==obj)return true;简单一目了然,不过仔细一想,如果obj引用不同的对象,equals就不肯定对象是否包含相同的值,所以返回false。对于Object的默认实现实际上是同一性而非相等性。

  Equals方法正确实现应该是以下思路:

      1.如果实参为null,就返回false,因为调用非静态Equals方法时,this指针所标识的对象显然不为null;

      2.如果this和obj实参引用同一个对象,就返回true。在比较大量字段的对象时这一步有助于提升性能。

      3.如果this和obj实参引用不同类型的对象,就返回false。

      4.针对类型定义的每个实例字段,将this对象中的值与obj对象中的值进行比较。任何字段不想等就返回false;

      5.调用基类的Equals方法来比较他定义的任何字段,如果基类的Equals方法返回false就返回false,否则true;  

posted @ 2017-03-08 21:18  贝同学  阅读(260)  评论(0)    收藏  举报