2011-03-01 14 views
1

のeuqityをチェックするオペレータのオーバーロード私が過負荷に演算子を使用する方法について尋ねたと誰もが、この場合にも...そのかなり一般的で、多くの場合、文字列、色のような二つのオブジェクトの株式をチェックするために使用することを==昨日二つのオブジェクト

を言及していません変数が同じオブジェクトを指しているかどうかをチェックするという意味ではありません。

答えて

1

あなたは基本的にどのような公平を意味するかを自分で決めることができます。フィールドが同じであれば、確かにそれを確認してください。

2

はい、==演算子(と同時に!=)をオーバーロードすることは妥当です。

あなたが持っているので、もしあなたは、それがでのオーバーロードではなく、オーバーライドすることに注意する必要があります。

object first = ...; 
object second = ...; 

if (first == second) 

かかわらず、あなたは何をやったかの参照の等価性をチェックすること。

+0

どのように演算子をオーバーライドできますか?私はそれがタイプの外では可能ではないと思った。 – Mocco

+0

@Cocodrilo:演算子をオーバーライドすることはできません。そして、同じ種類の中でのみオーバーロードすることができます。 –

0

あなたの質問が何であるかはっきりとは分かりませんが、あなたは自分自身に答えているようです。 オペレータ== etcをオーバーロードして、2つのオブジェクトが同じであることを確認することができます。したがって、文字列または色の例では、2つの文字列が同じ内容を持つか、2つの色が同じRGB値を持ちます。あなたが言うように、これは同じオブジェクトを指し示す2つの変数とは異なる。 あなたは、MSDNのセクションのオーバーロードの詳細については

Operator Overloading Tutorial

をチェックアウトする場合があります。

あなたがオーバーロードできる演算子のリストなどの詳細については、同様の質問:私の意見では why C# not allow operator overloading?

1

はのための参照の等価性をチェックし、.Equals(オブジェクトobj)を使用する==使用することをお勧めしますカスタム平等。

あなたは1つではなく2つの比較方法があります。

Equalityを再定義する場合、GetHashCode()を再定義して、等しい2つのオブジェクトが同じハッシュコードを返すようにする必要があります。