2011-05-10 6 views
4

効果的なC#(ISBN-13:978から0321658708)の第二版で37ページ、本はEffective C#:Object.Equals()、ExayまたはNayをオーバーライドしますか?

を読み、あなたが再定義することは決してないだろう第二の機能は、静的はObject.equals(ある)

しかし、39ページの、本は

を読み込む時点ではなく、参照セマンティクスのあなたのタイプは、(内容を比較する)値のセマンティクスに従わなければならない場合ということである(比較例)オブジェクトIDをINGの、あなたは1つが

public virtual bool Equals(object right); 

なく

public static bool Equals(object left, object right); 
を無効にする理由を説明するために、誰かがとても親切ようになり

インスタンスはObject.equals()の独自のオーバーライドを書くべき

ありがとうございました:)

答えて

8

静的メソッドをオーバーライドすることはできません。

+0

これは確かに正当な理由です。ありがとう! –

1

あなたはインスタンスはObject.equals()

お知らせ違い、静的の対の独自のオーバーライドを書くべき静的はObject.equals()

を再定義することはありませんインスタンス。これらの文章は同じ方法を指していません...

1

また、私が間違っていないと、静的なものは参照を比較するだけです。仮想のものはあなた自身の比較を書く能力を与えます。時間は参照ではなく値に基づいています。

2

最初にクリアするべきことは、静的メソッドを上書きできないことです。

public static bool Equals(object left, object right); 

の実装はオーバーライドできません。 static equalsメソッドは、ヌルチェックを行わないことを忠告するためだけのものです。内部的には最初に参照equalsをチェックし、次にコンテンツequals(非static equalsメソッド)をチェックします。

上記の引用符では、最初の引用符はstatic equalsメソッドを参照しています.2番目の非static equalsメソッドはObject.Equals()として表記されていますが、最初に "static Object.Equals () "

+0

非静的メソッドがインスタンスメソッドであると言うのは正しいでしょうか? –

+2

はい、 "非静的" == "インスタンス" –

+0

私の自身の質問に答える:[はい](http://msdn.microsoft.com/en-us/library/aa645766(v=vs.71)aspx) ) –

関連する問題