一個類有一個ID屬性,此屬性從SQL表的主鍵列中獲取值。基於主鍵的GetHashCode() - 安全嗎?
它是一個很好的做法,如果我寫
public override int GetHashCode()
{
return this.ID + GetType().GetHashCode();
}
到我的課? (的Equals已經overrided以同樣的方式。)
一個類有一個ID屬性,此屬性從SQL表的主鍵列中獲取值。基於主鍵的GetHashCode() - 安全嗎?
它是一個很好的做法,如果我寫
public override int GetHashCode()
{
return this.ID + GetType().GetHashCode();
}
到我的課? (的Equals已經overrided以同樣的方式。)
你爲什麼特別想在hashcode中包含這個類型?我可以看到,如果你有很多不同類型的在同一地圖同一ID對象的可能是有用的,但通常我只用
public override int GetHashCode()
{
return ID; // If ID is an int
// return ID.GetHashCode(); // otherwise
}
注意繼承範圍內的平等觀念成爲棘手層次結構 - 偏好合成而非繼承的另一個原因。你真的需要擔心這個嗎?如果你能封住你的類,它將使平等的測試更容易,因爲你只需要編寫:(你可能希望有一個強類型的equals方法和實施IEquatable)
public override bool Equals(object obj)
{
MyType other = obj as other;
return other != null && other.ID == ID;
}
爲什麼你不能只是做
public override int GetHashCode() {
return this.ID.GetHashCode();
}
我不知道你在做什麼是好的做法,因爲我不熟悉如何哈希碼被分配給一個類型實例。哈希碼的目的是以Int32形式存在對象的一致性表示。
謝謝對於你們兩個人來說,密封的想法+1。 – boj 2009-07-01 16:59:18