相关疑难解决方法(0)

平等和多态

有两个不可变类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)

c# c#-7.0 c#-7.3

24
推荐指数
3
解决办法
966
查看次数

标签 统计

c# ×1

c#-7.0 ×1

c#-7.3 ×1