c#对象私有属性在重载Equals中的使用

  一般情况下对象的比较会涉及到重载Equals方法,这里所说的方法只对同类型对象的比较有效。
  请看下面两段代码:
  1。不同类的比较

None.gif public   enum  ComplexionType
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    yellow,
InBlock.gif    white,
InBlock.gif    black
ExpandedBlockEnd.gif}

None.gif
None.gif
class  Chinese
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
public Chinese(ComplexionType complexionType)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
this.complexionType = complexionType;
ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif    
private ComplexionType complexionType;
InBlock.gif
InBlock.gif    
public override bool Equals(Object obj)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
if (!((obj is Chinese) || (obj is Japanese)))
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
return false;
ExpandedSubBlockEnd.gif        }
            Japanese japanese = (Japanese)obj;
InBlock.gif        
return this.complexionType == japanese.Complexion;
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif
None.gif
class  Japanese
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
public Japanese(ComplexionType complexionType)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
this.complexionType = complexionType;
ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif    
private ComplexionType complexionType;
InBlock.gif
InBlock.gif    
public ComplexionType Complexion
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
get
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
return complexionType;
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

  注意到上面,如果能直接引用到japanese.complexionType就好了,不过它不是public所以访问不到。
  但是,如果,我想对同样的Chinese类型做比较,情况就不同了,修改上面的Equals
None.gif public   override   bool  Equals(Object obj)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
if (!(obj is Chinese))
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
return false;
ExpandedSubBlockEnd.gif    }

InBlock.gif    Chinese chinese 
= (Chinese)obj;
InBlock.gif    
return this.complexionType == chinese.complexionType;
ExpandedBlockEnd.gif}

  虽然,同样定义了Chinese类型的实例,不过这里可以访问到该变量的private部分。

转载于:https://www.cnblogs.com/hill/archive/2005/01/28/98513.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值