ValueType.GetHashCode 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
傳回這個執行個體的雜湊碼。
public:
override int GetHashCode();
public override int GetHashCode ();
override this.GetHashCode : unit -> int
Public Overrides Function GetHashCode () As Integer
傳回
32 位元帶正負號的整數,其為這個執行個體的雜湊碼。
範例
下列範例示範如何 GetHashCode 透過衍生實值型別覆寫 方法。
public ref struct Complex
{
public:
double m_Re;
double m_Im;
virtual bool Equals( Object^ ob ) override
{
if ( dynamic_cast<Complex^>(ob) )
{
Complex^ c = dynamic_cast<Complex^>(ob);
return m_Re == c->m_Re && m_Im == c->m_Im;
}
else
{
return false;
}
}
virtual int GetHashCode() override
{
return m_Re.GetHashCode() ^ m_Im.GetHashCode();
}
};
public struct Complex
{
public double m_Re;
public double m_Im;
public override bool Equals( object ob ){
if( ob is Complex ) {
Complex c = (Complex) ob;
return m_Re==c.m_Re && m_Im==c.m_Im;
}
else {
return false;
}
}
public override int GetHashCode(){
return m_Re.GetHashCode() ^ m_Im.GetHashCode();
}
}
type Complex() =
member val m_Re = 0. with get, set
member val m_Im = 0. with get, set
override this.Equals(ob) =
match ob with
| :? Complex as c ->
this.m_Re = c.m_Re && this.m_Im = c.m_Im
| _ -> false
override this.GetHashCode() =
this.m_Re.GetHashCode() ^^^ this.m_Im.GetHashCode()
Public Structure Complex
Private m_Re As Double
Private m_Im As Double
Public Overloads Function Equals(ob As Object) As Boolean
If TypeOf ob Is Complex Then
Dim c As Complex = CType(ob, Complex)
Return m_Re = c.m_Re And m_Im = c.m_Im
Else
Return False
End If
End Function
Public Overloads Function GetHashCode() As Integer
Return m_Re.GetHashCode() ^ m_Im.GetHashCode()
End Function
End Structure
備註
方法 GetHashCode 適用于衍生自 ValueType 的類型。 衍生類型的一或多個欄位可用來計算傳回值。 如果您呼叫衍生型 GetHashCode
別的 方法,傳回值可能不適合當做雜湊表中的索引鍵使用。 此外,如果其中一或多個欄位的值變更,傳回值可能會變得不適合當做雜湊表中的索引鍵使用。 不論是哪一種情況,請考慮撰寫自己的 方法實 GetHashCode 作,以更緊密地表示型別雜湊程式碼的概念。
如需詳細資訊,請參閱 Object.GetHashCode 和System.Collections.Hashtable。
Windows 執行階段注意事項
當您在Windows 執行階段結構上呼叫 GetHashCode 方法時,它會提供未覆寫 GetHashCode 之實值型別的預設行為。 這是.NET Framework針對Windows 執行階段 (提供的支援的一部分,請參閱.NET Framework Windows Microsoft Store Apps 的支援和Windows 執行階段) 。 即使結構是以 C# 或 Visual Basic 撰寫,Windows 執行階段 結構仍無法覆 GetHashCode 寫 ,因為它們不能有方法。 (此外,Windows 執行階段本身中的結構不會繼承 ValueType .) 不過,當您在 C# 或Visual Basic程式碼中使用結構時,它們看起來會有 ToString 、 Equals 和 GetHashCode 方法,而.NET Framework會提供這些方法的預設行為。