给你的类重写Equals--检测Class是否相等

在C#的容器中,常用的三个容器数组,ArrayList,Hashtable..数组比较简单,实现某种单一数据的存储,但是并不能自由插入,移除和容纳不同的对象..,所以ArrayList是数组的替代品,并且由于ArrayList可以自由的添加,删除,插入,读取,给我们提供了足够大的自由性,颇得我的青睐..不过使用中,难免有些缺点,感觉最麻烦的就是检测某对象是否在Items中..因为每一个new出来的Class在内存中的表现不相同,即便是同一个类,你new出来两个,然后再判断,也是会一样的!!所以每次使用ArrayList.Contains()检测对象的时候,难免都得不到自己想要的结果..因为每个Class都是继承自Object类..而ArrayList.Contains()的实现是IList.Contains,而此方法是调用Class中的Equals方法判断是否相等,这个时候,可以在自己的对象中覆写Object.Equals方法,以达到自己的目的..注意,如果你覆写了Equals方法,则也要覆写GetHashCode(),因为Equals是用获取Object.GetHashCode()来做判断的.看看下面的代码就明白:

 1 using  System;
 2
 3 namespace  HashCode_Test
 4 {
 5/// <summary>
 6///        给你的类加入Equals,测试类
 7/// </summary>

 8public class Class2
 9{
10    int myHashCode = 0;
11    public Class2( int id )    //传递进一个int,作为GetHashCode的值
12    {
13        myHashCode = id;
14    }

15        
16    //覆写GetHashCode,关键的一步
17    public override int GetHashCode()    
18    {
19        return myHashCode;
20    }

21        
22    //这步,可有可无,主要是做测试结果用的
23    public override string ToString()    
24    {
25        return DateTime.Now.ToString();
26    }

27        
28    /// <summary>
29    ///        重载了Equals方法,这步和GetHashCode配合起来才会有效果
30    /// </summary>
31    /// <param name="o">要检测的对象</param>
32    /// <returns>返回是否相同</returns>

33    public override bool Equals( object o )    
34    {
35        return o.GetHashCode() == myHashCode;
36    }

37
38    //在这里使用运算符重载,主要是为了进一步演示Equals
39    public static bool operator ==(object c1, Class2 c2) 
40    {
41        return c1.GetHashCode().Equals( c2.GetHashCode() );
42    }

43    
44    //当你重载了==运算符后,必须要重载!=运算符
45    public static bool operator !=(object c1, Class2 c2) 
46    {
47        return c1.GetHashCode().Equals( c2.GetHashCode() );
48    }

49        
50}

51}

这里是测试代码:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值