5

比較演算子のオーバーロード、2 つの変数が同じオブジェクト (値ではない) を指している場合の比較方法

public static bool operator ==(Landscape a, Landscape b)
{
    return a.Width == b.Width && a.Height == b.Height;
}

public static bool operator !=(Landscape a, Landscape b)
{
    return !(a.Width == b.Width && a.Height == b.Height);
}
4

4 に答える 4

8

Object.ReferenceEquals 静的メソッドを使用します。

もちろん、== および != メソッドが完全な機能を保持するためには、Equals および GetHashCode もオーバーライドして、呼び出し元に一貫した一連の応答を返すようにする必要があります。

于 2009-03-06T05:40:07.720 に答える
4

試すa.ReferenceEquals(b);

于 2009-03-06T05:39:17.973 に答える
4

両方が同じオブジェクトを指しているかどうかを確認します。Object.ReferenceEquals メソッドを使用する必要があります。両方が同じ場合、または両方が null の場合は true を返します。それ以外の場合は false を返します

于 2009-03-06T06:09:41.130 に答える
0

古い質問だと思いますが、== または Object.Equals メソッドをオーバーロードする場合は、逆演算子 != もオーバーロードする必要があります。

この場合、内部の数値を比較しているので、他の比較演算子 <、>、<=、>= をオーバーロードする必要があります。

サードパーティのコンシューマーであろうと、コードを引き継ぐ開発者であろうと、将来クラスを使用する人は、ロジックを自動的に「反転」する CodeRush やリファクタリングなどを使用する可能性があります (条件の反転とも呼ばれます)。次に、それを平らにして、25 のネストされた if 症候群から抜け出します。彼らのコードがそれを行い、!= 演算子をオーバーロードせずに == 演算子をオーバーロードした場合、コードの意図した意味が変わる可能性があります。

于 2011-11-03T17:09:10.580 に答える