Sobes.tech
Junior — Middle

Por que a classe .NET sobrescreve os métodos GetHashCode e Equals?

sobes.tech IA

Resposta da IA

No .NET, os métodos GetHashCode e Equals são redefinidos para uma comparação correta de objetos e funcionamento adequado com coleções como dicionários (Dictionary) e conjuntos (HashSet).

  • Equals determina quando dois objetos são considerados iguais em significado.
  • GetHashCode devolve um código numérico usado para procurar rapidamente um objeto em tabelas de hash.

Se apenas redefinir o Equals, mas não o GetHashCode, os objetos podem não funcionar corretamente em coleções hash. Normalmente, esses métodos são redefinidos juntos para garantir a coerência: se Equals retorna true para dois objetos, o seu GetHashCode deve retornar o mesmo valor.

Exemplo:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }

    public override bool Equals(object obj)
    {
        if (obj is Person other)
            return Name == other.Name && Age == other.Age;
        return false;
    }

    public override int GetHashCode()
    {
        return HashCode.Combine(Name, Age);
    }
}