ValueType.GetHashCode Metódus

Definíció

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.

A következőre érvényes: