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 阅读(1210) 评论(0) 编辑 收藏 举报