Equals方法的重写实例 及 运算符重载

      对于引用类型来说,Object.Equals方法比较的是对象的相等性。当引用指向同一个对象的时候,它们是相等的,具有相同状态但指向不同对象的引用是不相等的。你可以对Equals方法进行重写以进行值比较。对于值类型来说,Equals已经重写过以进行值的比较。

我们现在假设Employee类是一个基类。HourlyEmployee,CommissionedEmployee和SalariedEmployee类都是从Employee类派生出来的,代表了不同类型的雇员。对Employee类中的Equals方法进行重写,得到以下代码:

//首先重载运算符==和!=
public static bool operator==(Employee obj1, Employee obj2) {
    return obj1.Equals(obj2);
}

public static bool operator!=(Employee obj1, Employee obj2) {
    return !obj1.Equals(obj2);
}

public override bool Equals(object obj) {
    Employee _obj=obj as Employee;
    if(obj==null) {
        return false;
   }

    return this.GetHashCode()==_obj.GetHashCode();
}

以上代码还包括了对运算符==和!=的重载。这些运算符的默认实现不会调用重写过的Equals方法。这会导致不一致,因为Equals方法中的比较运算符产生了不同的行为。由于这个原因,这两个运算符都必须进行重载。

在重写Equals方法的时候,也应该对GetHashCode进行重写,否则会产生一个编译器警告。相等的对象应该具有相同的哈希代码。因此,相等性可以基于对哈希代码的比较。在Equals方法里,通过调用GetHashCode方法来取得和比较哈希代码。

posted on 2007-10-08 13:37  lbq1221119  阅读(1208)  评论(0编辑  收藏  举报

导航