Sobes.tech
Junior — Middle

Miks .NET klassis üle kirjutab meetodid GetHashCode ja Equals?

sobes.tech AI

Vastus AI-lt

.NET-is on mõlemad meetodid GetHashCode ja Equals üle kirjutatud, et tagada objektide õige võrdlemine ja korrektne toimimine kogumitega nagu Dictionary ja HashSet.

  • Equals määrab, millal kaks objekti peetakse mõtteis võrdsed.
  • GetHashCode tagastab numbrilise koodi, mida kasutatakse objekti kiireks otsimiseks hash-tabelites.

Kui üle kirjutate ainult Equals, kuid mitte GetHashCode, võivad objektid hash-kogumites töötada valesti. Need meetodid tuleks tavaliselt koos üle kirjutada, et tagada järjepidevus: kui Equals tagastab kahe objekti puhul true, peab nende GetHashCode samuti tagastama sama väärtuse.

Näide:

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