operator ==をオーバーロードした後、2つの変数が同じオブジェクトを指すかどうかを比較する方法は?

StackOverflow https://stackoverflow.com/questions/617757

質問

比較演算子のオーバーロード、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);
}
役に立ちましたか?

解決

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

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

他のヒント

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

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

そしてこの場合、内部番号を比較しているので、他の比較演算子<!> lt;、<!> gt;、<!> lt; =、<!> gt; =。

クラスを将来消費する人は、サードパーティの消費者であろうと、コードを引き継ぐ開発者であろうと、CodeRushやRefactorのようなものを使用するかもしれません。それは自動的に<!> quot; flip <!> quot ;ロジック(条件の反転とも呼ばれます)を平坦化して、ネストされた25のif症候群から抜け出します。コードがそれを行い、!=演算子をオーバーロードせずに==演算子をオーバーロードした場合、コードの意図する意味が変更される可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top