Sobes.tech
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.