標籤:style blog http color 使用 strong
【GetHashCode】
GetHashCode 方法的預設實現不保證針對不同的對象返回唯一值。而且,.NET Framework 不保證 GetHashCode 方法的預設實現以及它所返回的值在不同版本的 .NET Framework 中是相同的。因此,在進行雜湊運算時,該方法的預設實現不得用作唯一物件識別碼。
用作 Hashtable 對象中鍵的對象還必須重寫 GetHashCode 方法,因為這些對象必鬚生成其各自的雜湊碼。如果用作鍵的對象不提供 GetHashCode 的有用實現,您可以在構造 Hashtable 對象時指定雜湊碼提供者。在 .NET Framework 2.0 版之前,雜湊碼提供者是基於 System.Collections.IHashCodeProvider介面的。從 2.0 版開始,雜湊碼提供者基於 System.Collections.IEqualityComparer 介面。
雜湊函數必須具有以下特點:
如果兩個對象的比較結果相等,則每個對象的 GetHashCode 方法都必須返回同一個值。但是,如果兩個對象的比較結果不相等,則這兩個對象的GetHashCode 方法不一定返回不同的值。
一個對象的 GetHashCode 方法必須總是返回同一個雜湊碼,但前提是沒有修改過對象狀態,對象狀態用來確定對象的 Equals 方法的傳回值。請注意,這僅適用於應用程式的當前執行,再次運行該應用程式時可能會返回另一個雜湊碼。
為了獲得最佳效能,雜湊函數必須為所有輸入產生隨機分布。
String 類提供的 GetHashCode 方法的實現為相同的字串值返回相同的雜湊碼。因此,如果兩個 String 對象表示相同的字串值,則它們返回相同的雜湊碼。另外,該方法使用字串中的所有字元產生相當隨機的分布式輸出,即使當輸入集中在某些範圍內時(例如,許多使用者可能有只包含低位 128 個 ASCII 字元的字串,即使字串可以包含 65,535 個 Unicode 字元中的任何字元)。
對於 Object 的衍生類別,若且唯若此衍生類別將值相等性定義為引用相等並且類型不是實值型別時,GetHashCode 方法才可以委託給 Object.GetHashCode 實現。
參考:http://msdn.microsoft.com/zh-cn/library/system.object.gethashcode(v=vs.90).aspx