Sobes.tech
Junior — Middle

Perché in una classe .NET si sovrascrivono i metodi GetHashCode e Equals?

sobes.tech AI

Risposta dell'AI

In .NET, i metodi GetHashCode e Equals vengono ridefiniti per confrontare correttamente gli oggetti e garantire il corretto funzionamento con collezioni come dizionari (Dictionary) e set (HashSet).

  • Equals determina quando due oggetti sono considerati uguali in senso.
  • GetHashCode restituisce un codice numerico usato per cercare rapidamente un oggetto nelle tabelle hash.

Se si ridefinisce solo Equals, ma non GetHashCode, gli oggetti potrebbero non funzionare correttamente nelle collezioni hash. Questi metodi vengono solitamente ridefiniti insieme per garantire coerenza: se Equals restituisce true per due oggetti, anche il loro GetHashCode dovrebbe restituire lo stesso valore.

Esempio:

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);
    }
}