Compartilhar via


ValueType.GetHashCode Método

Definição

Retorna o código hash dessa instância.

public:
 override int GetHashCode();
public override int GetHashCode ();
override this.GetHashCode : unit -> int
Public Overrides Function GetHashCode () As Integer

Retornos

Um inteiro com sinal de 32 bits que é o código hash dessa instância.

Exemplos

O exemplo a seguir demonstra como o método GetHashCode pode ser substituído por um tipo de valor derivado.

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

Comentários

O método GetHashCode se aplica a tipos derivados de ValueType. Um ou mais campos do tipo derivado são usados para calcular o valor retornado. Se você chamar o método GetHashCode do tipo derivado, o valor retornado provavelmente não será adequado para uso como uma chave em uma tabela de hash. Além disso, se o valor de um ou mais desses campos for alterado, o valor retornado poderá se tornar inadequado para uso como uma chave em uma tabela de hash. Em ambos os casos, considere escrever sua própria implementação do método GetHashCode que representa mais de perto o conceito de um código hash para o tipo.

Para obter mais informações, consulte Object.GetHashCodee System.Collections.Hashtable.

.NET 9 e posterior, a implementação padrão de ValueType.GetHashCode gerará NotSupportedException se InlineArrayAttribute for aplicado ao tipo.

Anotações para o Windows Runtime

Quando você chama o método GetHashCode em uma estrutura do Windows Runtime, ele fornece o comportamento padrão para tipos de valor que não substituem GetHashCode. Isso faz parte do suporte que o .NET fornece para o Windows Runtime (consulte suporte do .NET para aplicativos da Windows Store edo Windows Runtime). As estruturas do Windows Runtime não podem substituir GetHashCode, mesmo que sejam escritas com C# ou Visual Basic, porque não podem ter métodos. (Além disso, as estruturas no próprio Windows Runtime não herdam ValueType.) No entanto, eles parecem ter métodos ToString, Equalse GetHashCode quando você os usa em seu código C# ou Visual Basic, e o .NET fornece o comportamento padrão para esses métodos.

Aplica-se a