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