2009-07-01 22 views
2

一個類有一個ID屬性,此屬性從SQL表的主鍵列中獲取值。基於主鍵的GetHashCode() - 安全嗎?

它是一個很好的做法,如果我寫

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

到我的課? (的Equals已經overrided以同樣的方式。)

回答

5

你爲什麼特別想在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; 
} 

+0

謝謝對於你們兩個人來說,密封的想法+1。 – boj 2009-07-01 16:59:18

2

爲什麼你不能只是做

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

我不知道你在做什麼是好的做法,因爲我不熟悉如何哈希碼被分配給一個類型實例。哈希碼的目的是以Int32形式存在對象的一致性表示。