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;

浙公网安备 33010602011771号