Sobes.tech
Middle

რა განსხვავებაა C#-ში მეთოდს Equals და ოპერატორს == შორის?

sobes.tech AI

პასუხი AI-სგან

Տարբերությունը կապված է այն բանի հետ, թե ինչպես են նրանք համեմատում օբյեկտները:

Մեթոդ/Օպերատոր Նկարագրություն Հղմանային տիպերի համար համեմատություն Արժեքային տիպերի համար համեմատություն Օգտագործում
Equals() object դասի վիրտուալ մեթոդ, որը կարող է վերանվանվել: Դեպքում, երբ չի վերանվանվել, համեմատում է հղումները: Համեմատում է դաշտերի արժեքները: Միջնորդական
== Վերբեռնվող օպերատոր: Դեպքում, երբ չի վերանվանվել, համեմատում է հղումները: Դեպքում, երբ չի վերանվանվել, համեմատում է արժեքները: Միջնորդական

Օրինակներ:

// Հղմանային տիպերի համեմատություն
string s1 = new string("hello");
string s2 = new string("hello");
string s3 = s1;

Console.WriteLine(s1.Equals(s2)); // Ճշմարիտ (եթե `Equals` վերանվանված է)
Console.WriteLine(s1 == s2);     // Արտառոց (հղումները համեմատվում են)
Console.WriteLine(s1 == s3);     // Ճշմարիտ (հավասար հղումները համեմատվում են)
// Արժեքային տիպերի համեմատություն
int a = 10;
int b = 10;
int c = 20;

Console.WriteLine(a.Equals(b)); // Ճշմարիտ (արժեքները համեմատվում են)
Console.WriteLine(a == b);     // Ճշմարիտ (արժեքները համեմատվում են)
Console.WriteLine(a == c);     // Արտառոց (տարբեր արժեքներ)

Маանիլүү նշում: == օպերատորը կարող է վերանվանվել օգտագործողի համար, որպեսզի փոխվի նրա նախնական վարքագիծը: Equals() մեթոդը նույնպես կարող է վերանվանվել օգտագործողի կողմից, որպեսզի իրականացնել օգտագործողի տրամաբանությունը։ Հաճախ խորհուրդ է տրվում օգտագործել Equals() հղմանային տիպերի արժեքների համեմատության համար, իսկ արժեքային տիպերի համար՝ Equals() կամ ==, կախված կոնտեքստից և պահանջներից։