ValueType.GetHashCode Metódus
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
A példány kivonatkódját adja vissza.
public:
override int GetHashCode();
public override int GetHashCode();
override this.GetHashCode : unit -> int
Public Overrides Function GetHashCode () As Integer
Válaszok
Egy 32 bites aláírt egész szám, amely a példány kivonatkódja.
Példák
Az alábbi példa bemutatja, hogyan bírálható felül a GetHashCode metódus egy származtatott értéktípussal.
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
Megjegyzések
A GetHashCode metódus azokra a típusokra vonatkozik, amelyekből ValueTypeszármazik. A származtatott típus egy vagy több mezője a visszatérési érték kiszámítására szolgál. Ha meghívja a származtatott típus metódusát GetHashCode , a visszatérési érték valószínűleg nem alkalmas kulcsként való használatra egy kivonattáblában. Emellett ha egy vagy több mező értéke megváltozik, a visszatérési érték nem lesz használható kulcsként egy kivonattáblában. Mindkét esetben érdemes lehet megírni a GetHashCode metódus saját implementációját, amely közelebbről szemlélteti a típus kivonatkódjának fogalmát.
További információ: Object.GetHashCodeés System.Collections.Hashtable.
.NET 9-es és újabb verziókban a ValueType.GetHashCode alapértelmezett implementációja NotSupportedException, ha InlineArrayAttribute van alkalmazva a típusra.
Megjegyzések a Windows futtatókörnyezethez
Amikor meghívja a GetHashCode metódust egy Windows-futtatókörnyezet struktúrában, az alapértelmezett viselkedést biztosítja az olyan értéktípusokhoz, amelyek nem bírálják felül GetHashCode. Ez része annak a támogatásnak, amelyet a .NET biztosít a Windows futtatókörnyezethez (lásd .NET-támogatás a Windows Áruházbeli alkalmazásokhoz és a Windows-futtatókörnyezeti). Windows-futtatókörnyezet struktúrák nem tudják felülbírálni GetHashCode, még akkor sem, ha C# vagy Visual Basic használatával vannak megírva, mert nem rendelkezhetnek metódusokkal. (Ezenkívül a Windows-futtatókörnyezet maga a struktúrák nem öröklik ValueType.) Úgy tűnik azonban, hogy ToString, Equals és GetHashCode metódusokkal rendelkeznek, amikor c# vagy Visual Basic kódban használja őket, és .NET ezekhez a metódusokhoz az alapértelmezett viselkedést biztosítja.