一般情况下对象的比较会涉及到重载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;
}
}
}
{
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;
}
{
if (!(obj is Chinese))
{
return false;
}
Chinese chinese = (Chinese)obj;
return this.complexionType == chinese.complexionType;
}
虽然,同样定义了Chinese类型的实例,不过这里可以访问到该变量的private部分。