Freigeben über


ValueType.GetHashCode-Methode

Gibt den Hashcode für diese Instanz zurück.

Namespace: System
Assembly: mscorlib (in mscorlib.dll)

Syntax

'Declaration
Public Overrides Function GetHashCode As Integer
'Usage
Dim instance As ValueType
Dim returnValue As Integer

returnValue = instance.GetHashCode
public override int GetHashCode ()
public:
virtual int GetHashCode () override
public int GetHashCode ()
public override function GetHashCode () : int

Rückgabewert

Eine 32-Bit-Ganzzahl mit Vorzeichen. Diese ist der Hashcode für die Instanz.

Hinweise

Die GetHashCode-Methode gilt für Typen, die von ValueType abgeleitet wurden. Eines oder mehrere Felder des abgeleiteten Typs werden verwendet, um den Rückgabewert zu berechnen. Wenn die GetHashCode-Methode des abgeleiteten Typs aufgerufen wird, eignet sich der Rückgabewert wahrscheinlich nicht für die Verwendung als Schlüssel in einer Hashtabelle. Wenn sich der Wert eines oder mehrerer dieser Felder ändert, eignet sich der Rückgabewert möglicherweise auch nicht mehr für die Verwendung als Schlüssel in einer Hashtabelle. Schreiben Sie in jedem Fall eine eigene Implementierung der GetHashCode-Methode, die das Konzept eines Hashcodes für den Typ genauer darstellt.

Weitere Informationen finden Sie unter Object.GetHashCode und System.Collections.Hashtable.

Beispiel

Im folgenden Beispiel wird veranschaulicht, wie die GetHashCode-Methode mit einem abgeleiteten Werttyp überschrieben werden kann.

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
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();
    }
}
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 class Complex
{
    public double mRe;
    public double mIm;

    public boolean Equals(Object ob)
    {
        if (ob instanceof Complex) {
            Complex c = (Complex)ob;
            return mRe == c.mRe && mIm == c.mIm;
        }
        else {
            return false;
        }
    } //Equals

    public int GetHashCode()
    {
        return ((System.Double)mRe).GetHashCode() ^ ((System.Double)mIm).
            GetHashCode();
    } //GetHashCode
} //Complex
public class Complex 
{
    public var m_Re : double;
    public var m_Im : double;

    public override function Equals( ob ) : Boolean{
        if( ob.GetType() == Complex ) {
            var c : Complex = Complex(ob);
            return m_Re==c.m_Re && m_Im==c.m_Im;
        }
        else {
            return false;
        }
    }

    public override function GetHashCode() : int{
        return m_Re.GetHashCode() ^ m_Im.GetHashCode();
    }
            
            public static function main() {
                   var x : Complex = new Complex();
                   x.m_Re = 1;
                   x.m_Im = 2;
                   var y : Complex = new Complex();
                   y.m_Re = 2;
                   y.m_Im = 1;
                   
                   Console.Write(x.Equals(y));                       
            }
}

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0, 1.0

Siehe auch

Referenz

ValueType-Klasse
ValueType-Member
System-Namespace