C# 如何重写Equals()、GetHashCode()及重写的意义

当使用自定义类作为集合(如字典)的key时,重写Equals()和GetHashCode()至关重要。Equals()默认比较对象引用,而重写则实现相等性比较。GetHashCode()返回对象的哈希码,与Equals()配套修改以确保一致性。不重写可能导致相等对象被视为不等。记住,"=="运算符不会自动调用Equals()。
摘要由CSDN通过智能技术生成

既然Object类里的ToString()这个虚方法能被重写且有一定的意义,那么Equals()、GetHashCode()这两个虚方法被重写后,同样是有意义的。这里说的Equals()是Equals(Object obj)这个虚方法。如果用到了集合(通常是字典),key为自定义类的对象时,请务必重写此自定义类的Equals(),因为判断key是否相等时,会自动调用Equals()。
注意:使用"=="时肯定不会自动调用Equals(),这完全是两个东西,别搞混了,具体请见官方文档 https://docs.microsoft.com/zh-cn/previous-versions/ms173147(v=vs.80)

在Object类中可以看见Equals的原本实现,原本是比较两个obj的引用是否相等,也就是指向的地址是否一致。也就是说Equals默认实现的是同一性,而不是相等性。

那么我们就得重写Equals来实现相等性了,边举例边讲:重写了Atom类的基类Object的Equals和GetHashCode函数

public class Atom
{
	public AtomType Type { get; set; } // AtomType 是个枚举
	//省略其他代码,只贴出Equals、GetHashCode相关的代码:
	public override bool Equals(object obj)
	{
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值