Equals方法的重寫(xiě)實(shí)例 及 運(yùn)算符重載
我們現(xiàn)在假設(shè)Employee類是一個(gè)基類。HourlyEmployee,CommissionedEmployee和SalariedEmployee類都是從Employee類派生出來(lái)的,代表了不同類型的雇員。對(duì)Employee類中的Equals方法進(jìn)行重寫(xiě),得到以下代碼:
//首先重載運(yùn)算符==和!=
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();
}
以上代碼還包括了對(duì)運(yùn)算符==和!=的重載。這些運(yùn)算符的默認(rèn)實(shí)現(xiàn)不會(huì)調(diào)用重寫(xiě)過(guò)的Equals方法。這會(huì)導(dǎo)致不一致,因?yàn)镋quals方法中的比較運(yùn)算符產(chǎn)生了不同的行為。由于這個(gè)原因,這兩個(gè)運(yùn)算符都必須進(jìn)行重載。
在重寫(xiě)Equals方法的時(shí)候,也應(yīng)該對(duì)GetHashCode進(jìn)行重寫(xiě),否則會(huì)產(chǎn)生一個(gè)編譯器警告。相等的對(duì)象應(yīng)該具有相同的哈希代碼。因此,相等性可以基于對(duì)哈希代碼的比較。在Equals方法里,通過(guò)調(diào)用GetHashCode方法來(lái)取得和比較哈希代碼。
posted on 2007-10-08 13:37 lbq1221119 閱讀(1225) 評(píng)論(0) 收藏 舉報(bào)
浙公網(wǎng)安備 33010602011771號(hào)