既然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)
{