Sobes.tech
Junior — Middle

Warum überschreibt man in einer .NET-Klasse die Methoden GetHashCode und Equals?

sobes.tech KI

Antwort von AI

In .NET werden die Methoden GetHashCode und Equals überschrieben, um einen korrekten Vergleich von Objekten und eine ordnungsgemäße Arbeit mit Sammlungen wie Wörterbüchern (Dictionary) und Mengen (HashSet) zu gewährleisten.

  • Equals bestimmt, wann zwei Objekte als gleich angesehen werden.
  • GetHashCode gibt einen numerischen Code zurück, der für die schnelle Suche eines Objekts in Hash-Tabellen verwendet wird.

Wenn nur Equals überschrieben wird, aber nicht GetHashCode, können Objekte in Hash-Sammlungen falsch funktionieren. Diese Methoden werden normalerweise zusammen überschrieben, um Konsistenz zu gewährleisten: Wenn Equals für zwei Objekte true zurückgibt, sollte auch ihr GetHashCode denselben Wert liefern.

Beispiel:

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