1

DLL に実装されたコンポーネントを使用します。System.Windows.Forms.Control から継承されます。.NET Hashtable オブジェクトのキーとして使用する必要があります。

MSDN が述べているように、

Hashtable によってキーとして使用されるオブジェクトは、Object.GetHashCode メソッド (または IHashCodeProvider インターフェイス) および Object.Equals メソッド (または IComparer インターフェイス) をオーバーライドする必要があります。

しかし、私たちが話しているコントロールには、GetHashCode メソッドの独自の実装がありません。Object.GetHashCodeのドキュメントによると、

GetHashCode がオーバーライドされていない場合、参照型のハッシュ コードは、基本クラスの Object.GetHashCode メソッドを呼び出すことによって計算されます。このメソッドは、オブジェクトの参照に基づいてハッシュ コードを計算します。

ハッシュテーブルでコントロールを「そのまま」安全に使用できるということですか?

4

1 に答える 1

2

これを行うときは、オブジェクト ID だけを気にする必要があります。つまり、2 つのコントロールを同じハッシュ テーブル スロットにマップする必要はありません。+/- 1% まで正確ではない

Control クラスが継承するデフォルトの Object.GetHashCode() および Object.Equals() の実装はすでに完璧であり、オブジェクト参照 ID を実装しています。

そしてもちろんDictionary<Control, Something>、Hashtable は 8 年前です。

于 2013-08-05T13:51:15.783 に答える