Middle
Mis vahe on meetodil Equals ja operaatoril == C#-s?
sobes.tech AI
Vastus AI-lt
Erinevus määrab see, kuidas nad objekte võrdlevad:
| Meetod/Operaator | Kirjeldus | Võrdlus viidetüüpidega | Võrdlus väärtustüüpidega | Ülekoormus |
|---|---|---|---|---|
Equals() |
Virtuaalne object klassi meetod, mida saab üle kirjutada. |
Vaikimisi võrdleb viiteid (kui pole üle kirjutatud). | Võrdleb väljade väärtusi (üle kirjutatud või sisseehitatud). | Võimalik |
== |
Ülekoormatav operaator. | Vaikimisi võrdleb viiteid (viit tüübid). | Vaikimisi võrdleb väärtusi (väärtusetüübid). | Võimalik |
Näited:
// Viidetüüpide võrdlus
string s1 = new string("hello");
string s2 = new string("hello");
string s3 = s1;
Console.WriteLine(s1.Equals(s2)); // Tõene (kui `Equals` on üle kirjutatud)
Console.WriteLine(s1 == s2); // Väär (võrreldakse viiteid)
Console.WriteLine(s1 == s3); // Tõene (võrreldakse samu viiteid)
// Väärtusetüüpide võrdlus
int a = 10;
int b = 10;
int c = 20;
Console.WriteLine(a.Equals(b)); // Tõene (võrreldakse väärtusi)
Console.WriteLine(a == b); // Tõene (võrreldakse väärtusi)
Console.WriteLine(a == c); // Väär (erinevad väärtused)
Oluline on meeles pidada, et == operaatorit saab üle kirjutada kasutaja tüüpi, et muuta selle vaikimisi käitumist. Equals() meetodit saab samuti üle kirjutada, et rakendada kasutaja defineeritud võrdluslogikat. Enamasti soovitatakse kasutada Equals() viidetüüpide väärtuste võrdlemiseks ning Equals() või == väärtusetüüpide puhul, sõltuvalt kontekstist ja nõuetest.