ValueType.GetHashCode Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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.