No właśnie tak.
Ogólnie to kompletnie już tego nie rozumiem.
Jeśli w funkcji głównej zrobię coś takiego:
int x = 5;
int y = 5;
Console.WriteLine(x.Equals(y));
to oczywiście zwróci True.
Jeśli jednak mam jakąś klasę, powiedzmy Osoba, to coś takiego
Osoba a = new Osoba("Adam", "Abacki", 23);
Osoba b = new Osoba("Adam", "Abacki", 23);
Console.WriteLine(a.Equals(b));
zwraca mi False. Jeśli zaś przeciążam Equals to wypisuje true. Przeciążony Equals i cała klasa Osoba wygląda tak:
class Osoba
{
public string pesel;
public string imie;
public int wiek;
public Osoba(string p, string imie, int wiek)
{
this.pesel = p;
this.imie = imie;
this.wiek = wiek;
}
public override bool Equals(Object obj)
{
Osoba OsobaObj = obj as Osoba;
if (OsobaObj == null)
return false;
else
return pesel.Equals(OsobaObj.p) && imie.Equals(OsobaObj.imie) && wiek.Equals(OsobaObj.wiek);
}
public override int GetHashCode()
{
return this.pesel.GetHashCode();
}
Jednak co ciekawe, jeśli użyję tego obiektu (ale zakomentowująć przeciążonego Equalsa w klasie osoba!) w klasie Slownik<K,V> na polu K (klucz), to bez problemu mi usuwa to co chce.
Funkcję usuń w klasie Slownik<K,V> mam zaimplementwaną tak:
public Wezel<K, V> usun(K ukey)
{
Wezel<K, V> pomoc = poczatek;
while (!(pomoc.pobierzKlucz().Equals(ukey)))
{
pomoc = pomoc.pobierzNastepny();
}
Wezel<K, V> nastepnyWezel = pomoc.pobierzNastepny();
Wezel<K, V> poprzedniWezel = pomoc.pobierzPoprzedni();
poprzedniWezel.ustawNastepny(nastepnyWezel);
nastepnyWezel.ustawPoprzedni(poprzedniWezel);
return pomoc;
}
Oczywiście metoda pobierzKlucz() zwraca obiekt typu K.