如果我們要創建一個類,無論是引用還是值類型的,經常要實現equals方法,下面把這兩種一般的實現方式寫在這裡
1.引用類型的實現
class MyRefType : BaseType {
RefType refobj; //引用類型的對象
ValType valobj; //值類型的對象
public override bool Equals(object obj)
{
//當基類實現了equals時,首先要調用基類的equals方法,然後再進行別的,如果基類沒有重寫equals方法,那麼這個判斷可以去掉
if (!base.Equals(obj)) return false;
//因為this不肯能null,所以如果obj為null,將不可能相等
if (obj == null) {
return false;
}
//如果兩個對象的類型不一樣,將不可能相等
if (this.GetType() != obj.GetType()) return false;
//
MyRefType other = (MyRefType )obj;
if (!Object.Equals(refobj, other.refobj)) return false; //引用類型中無論是什麼類型那個的變量都可以用object的靜態equals方法進行判斷,但是值類型的類的equals方法在這裡是有區別的,引用可以用,但是值類型變量就改變了
if (!Object.Equals(valobj, other.valobj)) return false;
return true;
}
//當重寫了equals方法是,一定要“==”和“!=”進行重寫
public static Boolean operator ==(MyRefType o1, MyRefType o2) {
return object.Equals(o1,o2);
}
public static Boolean operator !=(MyRefType o1, MyRefType o2) {
return