有两个不可变类Base和Derived(派生自Base)我想定义Equality这样
平等总是多态的 - ((Base)derived1).Equals((Base)derived2)即将调用Derived.Equals
运营商==和!=将调用Equals,而不是ReferenceEquals(值相等)
我做了什么:
class Base: IEquatable<Base> {
public readonly ImmutableType1 X;
readonly ImmutableType2 Y;
public Base(ImmutableType1 X, ImmutableType2 Y) {
this.X = X;
this.Y = Y;
}
public override bool Equals(object obj) {
if (object.ReferenceEquals(this, obj)) return true;
if (obj is null || obj.GetType()!=this.GetType()) return false;
return obj is Base o
&& X.Equals(o.X) && Y.Equals(o.Y);
}
public override int GetHashCode() => HashCode.Combine(X, Y);
// boilerplate
public bool …Run Code Online (Sandbox Code Playgroud)