-5

私は Operator のオーバーロードについて学び始めました。サンプル コードでは、これら 2 つのメソッドが (public override bool equals(object obj)public override int gethashcode()) であることがわかりました。なぜそこにあるのか理解できませんでした。なぜなら、私がこのプログラムをダブったとき、コンパイラーがそれらに入ることを知らなかったからです。彼らが何をしているのか、私が何をオーバーライドしているのかわかりません。

誰かが私を助けて説明してもらえますか?

4

2 に答える 2

1

.NET のほとんどの型はSystem.Object、単にobjectC# で呼び出される type から派生します。(例えば、インターフェースはそうではありませんが、それらの実装はそうです。)

System.ObjectEqualsメソッドとGetHashCode他のメンバーを宣言します。(注: C# では大文字と小文字が区別されます)。作成する型は、これらのメソッドを自動的に継承します。

のタスクはEquals、オブジェクトを別のオブジェクトと比較することです。参照型のデフォルトの実装は、参照を比較することです。この動作を変更したい場合は、このメソッドをオーバーライドする必要があります。

GetHashCodeオブジェクトのハッシュ コードを計算し、ハッシュ テーブルで使用されます。たとえば、タイプDictionary<TKey,TValue>とそれHashSet<T>を利用します。Hashtable および Dictionary コレクションの型を参照してください。をオーバーライドする場合は、一貫性を保つためにもEqualsオーバーライドする必要があります。GetHashCode

于 2012-12-19T16:06:42.737 に答える
0

最初にドキュメントを参照することをお勧めします。

Object.Equals -> 指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

現在のインスタンスと obj パラメーターの比較の型は、現在のインスタンスが参照型か値型かによって異なります。現在のインスタンスが参照型の場合、Equals(Object) メソッドは参照の等価性をテストし、Equals(Object) メソッドの呼び出しは ReferenceEquals メソッドの呼び出しと同等です。参照の等価性とは、比較されるオブジェクト変数が同じオブジェクトを参照することを意味します。

Object.GetHashCode -> 特定の型のハッシュ関数として機能します。

ハッシュ コードは、等価テスト中にオブジェクトを識別するために使用される数値です。コレクション内のオブジェクトのインデックスとしても機能します。GetHashCode メソッドは、ハッシュ アルゴリズムやハッシュ テーブルなどのデータ構造での使用に適しています。

オーバーライドする理由> c# のすべての型はSystem.Objectから派生しています。これらは、必要に応じてこれらの関数の代替/適切な実装を提供するクラスを派生させる機能を提供するためのオーバーライドです。それ以外の場合は、デフォルトの実装 ( System.Objectで十分なはずです)。

于 2012-12-19T16:14:42.963 に答える