Sobes.tech
Junior — Middle

Zašto je važno prepisati metodu GetHashCode u klasama?

sobes.tech АИ

Одговор од АИ

Prepisivanje metode GetHashCode je važno za ispravno funkcionisanje objekata u kolekcijama zasnovanim na heširanju, kao što su Dictionary, HashSet i druge.

Razlozi:

  • GetHashCode vraća numeričku vrednost koja se koristi za brzo pronalaženje objekta u heš tabelama.
  • Ako su dva objekta smatrana jednakim (prema metodi Equals), oni treba da vraćaju isti heš kod kako bi kolekcije ispravno radile sa njima.
  • Ako GetHashCode nije prepisan zajedno sa Equals, objekti mogu biti pogrešno upoređivani ili duplirani u kolekcijama.

Primer:

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

Na ovaj način, prepisivanje GetHashCode osigurava konzistentnost sa Equals i ispravno funkcionisanje objekata u hash strukturama.