C#语言中,由于内存为系统自动管理,且重载Equals方法形参为Object基类,加上C#建议实现GetHashCode方法来加快判断,这样在判断相等方面就多了几步:
1. 判断两个对象是否对象相等;
2. 判断两个对象类型是否相等;
3. 判断两个对象GetHashCode方法是否相等;
4. 判断基类对象是否相等;
5. 判断类成员是否相等;
这样一个完整的方法实现如下:
class A {
public int val { set; get; }
public A(int value) {
val = value;
}
public override bool Equals(object obj)
{
if (obj == null) return false;
if (this.GetType() != obj.GetType())
return false;
A o = (A)obj;
if (ReferenceEquals(this, o))
return true;
if (this.GetHashCode() != o.GetHashCode())
return false;
if (base.GetType() != typeof(object) && !base.Equals