Delphi プロジェクト (RAD Studio XE7 でビルド) 用に、ブラシの辞書を作成したいと考えています。各ディクショナリ項目には、取得するブラシを記述する TMyBrush オブジェクトがキーとして含まれ、GDI+ ブラシが値として含まれます。
TMyBrush クラスには 3 つのフィールドが含まれています
- ブラシの種類 (ソリッド、グラデーションなど) を決定する列挙型
- ブラシの内容 (色、ラップ モードなど) を記述する TBrushInfo クラス
- クランプ フィールドを表す TRect
私の辞書では、彼のインスタンスではなく、彼の特性に基づいてブラシを取得したいと考えています。たとえば、ローカルの TMyBrush インスタンスを作成し、それを黒のソリッドに構成し、TryGetValue() 関数を使用して一致する GDI+ 値を取得することで、辞書から黒のソリッド ブラシを取得したいと考えています。そのために、TMyBrushComparer を作成しました。
Equals() 関数を書くことは、私にとっては問題ではありません。ただし、GetHashCode() 関数を記述するためのベスト プラクティスが何であるかはわかりません。私は次のような関数を書く傾向があります:
function TMyBrushComparer.GetHashCode(const pValue: TMyBrush): Integer;
begin
Result := BobJenkinsHash(pValue, SizeOf(TMyBrush), 0);
end;
しかし、それはあまり良い習慣ではないと思いますが、正しいですか? では、TMyBrushComparer に適した GetHashCode() 関数を作成するためのベスト プラクティスは何ですか?
よろしく