1. ホーム
  2. c#

演算子のオーバーロード ==, !=, Equals

2023-11-14 05:45:17

疑問点

私はすでに 質問

を実装する必要があることは理解しています。 == , !=Equals() .

public class BOX
{
    double height, length, breadth;

    // this is first one '=='
    public static bool operator== (BOX obj1, BOX obj2)
    {
        return (obj1.length == obj2.length 
                    && obj1.breadth == obj2.breadth 
                    && obj1.height == obj2.height);
    }

    // this is second one '!='
    public static bool operator!= (BOX obj1, BOX obj2)
    {
        return !(obj1.length == obj2.length 
                    && obj1.breadth == obj2.breadth 
                    && obj1.height == obj2.height);
    }

    // this is third one 'Equals'
    public override bool Equals(BOX obj)
    {
        return (length == obj.length 
                    && breadth == obj.breadth 
                    && height == obj.height);
    }
}

を上書きするように適切にコードを書いたと仮定します。 == , != , Equals という演算子を使っています。しかし、以下のようなコンパイルエラーが発生します。

'myNameSpace.BOX.Equals(myNameSpace.BOX)' is marked as an override 
but no suitable method found to override.

そこで質問ですが、上記の演算子 & をどのようにオーバーライドすれば、このエラーを取り除くことができるのでしょうか?

どのように解決するのですか?

を宣言したのだと思います。 Equals メソッドをこのように宣言しています。

public override bool Equals(BOX obj)

というのは object.Equals メソッドはオブジェクトを受け取るので、このシグネチャでオーバーライドするメソッドはありません。このようにオーバーライドする必要があります。

public override bool Equals(object obj)

タイプセーフの Equals, を実装することができます。 IEquatable<BOX> .