Sobes.tech
Junior — Middle

Zašto se u .NET klasi prepisuju metode GetHashCode i Equals?

sobes.tech АИ

Одговор од АИ

U .NET-u, metode GetHashCode i Equals se redefinišu kako bi se obezbedilo ispravno poređenje objekata i pravilno funkcionisanje sa kolekcijama kao što su rečnici (Dictionary) i skupovi (HashSet).

  • Equals određuje kada se dva objekta smatraju jednakim u smislu.
  • GetHashCode vraća numerički kod koji se koristi za brzo pretraživanje objekta u hash tabelama.

Ako redefinišete samo Equals, ali ne i GetHashCode, objekti mogu nepravilno da funkcionišu u hash kolekcijama. Ove metode se obično redefinišu zajedno kako bi se osigurala konzistentnost: ako Equals vraća true za dva objekta, njihov GetHashCode treba da vraća istu vrednost.

Primer:

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