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 para a 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 para esta instância.
Exemplos
O exemplo a seguir demonstra como o GetHashCode método 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 GetHashCode método 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 do GetHashCode
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 GetHashCode método que representa mais de perto o conceito de um código hash para o tipo.
Para obter mais informações, consulte Object.GetHashCode e System.Collections.Hashtable.
Notas para o Windows Runtime
Quando você chama o GetHashCode método em uma estrutura 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 e Windows Runtime). Windows Runtime estruturas 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 ToStringmétodos , 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
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de