這是因為在此函數中要用到具體類型的兩個判等函數 ,不過就函數本身而言,該做的判斷都做了,因此不需要去重載添加復雜的操作 。
為了更好的述說剩下兩個函數,先解釋一下等價的意義。對於等價的 意義,就是自反、對稱以及傳遞。
所謂自反,即a == a;
而對稱 ,是a == b,則b == a;
傳遞是 a == b,b == c,則 a == c;
理解等價的意義後,那麼在實現類型的判等函數也要滿足這個等價規則。
對於可以重載的兩個判等函數,首先來介紹的是類型的Equals函數,其 大致形式如下:
public override bool Equals( object right );
那麼對於一個類型的Equals要做些什麼操作呢,一般來說大致 如下:
public class KeyData
{
private int nData;
public int Data
{
get{ return nData;}
set{ nData = value; }
}
public override bool Equals( object right )
{
//Check null
if( right == null )
return false;
//check reference equality
if( object.ReferenceEquals( this, right ) )
return true;
//check type
if( this.GetType() != right.GetType() )
return false;
//convert to current type
KeyData rightASKeyData = right as KeyData;
//check members value
return this.Data == rightASKeyData.Data;
}
}
如上增加了一個類型檢 查,即
if( this.GetType() != right.GetType() )