一般情況下對象的比較會涉及到重載Equals方法,這裡所說的方法只對同類型對象的比較有效。
請看下面兩段代碼:
1。不同類的比較
public enum ComplexionType
{
yellow,
white,
black
}
class Chinese
{
public Chinese(ComplexionType complexionType)
{
this.complexionType = complexionType;
}
private ComplexionType complexionType;
public override bool Equals(Object obj)
{
if (!((obj is Chinese) || (obj is Japanese)))
{
return false;
}
Japanese japanese = (Japanese)obj;
return this.complexionType == japanese.Complexion;
}
}
class Japanese
{
public Japanese(ComplexionType complexionType)
{
this.complexionType = complexionType;
}
private ComplexionType complexionType;
public ComplexionType Complexion
{
get
{
return complexionType;
}
}
}
注意到上面,如果能直接引用到japanese.complexionType就好了,不過它不是public所以訪問不到。
但是,如果,我想對同樣的Chinese類型做比較,情況就不同了,修改上面的Equals
public override bool Equals(Object obj)
{
if (!(obj is Chinese))
{
return false;
}
Chinese chinese = (Chinese)obj;
return this.complexionType == chinese.complexionType;
}
雖然,同樣定義了Chinese類型的執行個體,不過這裡可以訪問到該變數的private部分。