2009-07-01 5 views
2

クラスにはIDプロパティがあり、このプロパティはSQLテーブルの主キー列から値を取得します。私は私のクラスに主キーに基づいたGetHashCode()は安全ですか?

public override int GetHashCode() 
{ 
    return this.ID + GetType().GetHashCode(); 
} 

を書く場合

それは良い練習ですか? (が同じように、すでにオーバーライド等しい。)

答えて

5

なぜあなたは特にタイプをハッシュコードに含める必要がありますか?私はあなたが同じマップで同じIDを持つオブジェクトのさまざまな種類の多くを持っていた場合には役立つ可能性がどのように見ることができますが、通常私は平等の思想は、相続内トリッキーになる

public override int GetHashCode() 
{ 
    return ID; // If ID is an int 
    // return ID.GetHashCode(); // otherwise 
} 

ノートを使用したいです継承よりも構成を優先させる別の理由です。あなたは実際にこれについて心配する必要がありますか?あなたのクラスを封止することができる場合にのみ記述する必要があるとして、それは平等のテストが簡単になります。

public override bool Equals(object obj) 
{ 
    MyType other = obj as other; 
    return other != null && other.ID == ID; 
} 

を(あなたも強く型付けされたが、equalsメソッドを持っているとIEquatableを実装することをお勧めします。)

+0

感謝両方のあなたのために、封印されたアイデア+1。 – boj

2

は、なぜあなたはちょうど

public override int GetHashCode() { 
    return this.ID.GetHashCode(); 
} 

を行うことができない私はどのように精通していないですので、何をやっていることは良い習慣であるかどうかわからないです型インスタンスにハッシュコードが割り当てられます。また、ハッシュコードの目的は、Int32形式でオブジェクトの一貫性表現を行うことです。

関連する問題