Junior — Middle
Dlaczego w klasie .NET nadpisuje się metody GetHashCode i Equals?
sobes.tech AI
Odpowiedź od AI
W .NET metody GetHashCode i Equals są nadpisywane, aby poprawnie porównywać obiekty i prawidłowo działać z kolekcjami takimi jak słowniki (Dictionary) i zbiory (HashSet).
- Equals określa, kiedy dwa obiekty są uważane za równe w sensie.
- GetHashCode zwraca kod numeryczny, który jest używany do szybkiego wyszukiwania obiektu w tabelach hash.
Jeśli nadpiszesz tylko Equals, ale nie GetHashCode, obiekty mogą działać niepoprawnie w kolekcjach hash. Te metody zwykle nadpisuje się razem, aby zapewnić spójność: jeśli Equals zwraca true dla dwóch obiektów, ich GetHashCode powinien zwracać tę samą wartość.
Przykład:
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);
}
}