Sobes.tech
Middle

Jaký je rozdíl mezi metodou Equals a operátorem == v C#?

sobes.tech AI

Odpověď od AI

Rozdíl spočívá v tom, jak porovnávají objekty:

Metoda/Operátor Popis Porovnání pro referenční typy Porovnání pro hodnotové typy Přetížení
Equals() Virtuální metoda třídy object, může být přepsána. Ve výchozím nastavení porovnává reference (pokud není přepsáno). Porovnává hodnoty polí (při přepsání nebo pro vestavěné typy). Možné
== Přetížitelný operátor. Ve výchozím nastavení porovnává reference (pro referenční typy). Ve výchozím nastavení porovnává hodnoty (pro hodnotové typy). Možné

Příklady:

// Porovnání referenčních typů
string s1 = new string("hello");
string s2 = new string("hello");
string s3 = s1;

Console.WriteLine(s1.Equals(s2)); // True (pokud je přepsáno Equals ve stringu)
Console.WriteLine(s1 == s2);     // False (porovnávají se reference)
Console.WriteLine(s1 == s3);     // True (stejné reference)
// Porovnání hodnotových typů
int a = 10;
int b = 10;
int c = 20;

Console.WriteLine(a.Equals(b)); // True (porovnávají se hodnoty)
Console.WriteLine(a == b);     // True (porovnávají se hodnoty)
Console.WriteLine(a == c);     // False (různé hodnoty)

Je důležité pamatovat, že operátor == může být přepsán pro vlastní typy, aby změnil jeho výchozí chování. Metoda Equals() může být také přepsána pro implementaci vlastní logiky porovnání objektů. Ve většině případů se doporučuje používat Equals() pro porovnání referenčních typů a Equals() nebo == pro hodnotové typy, v závislosti na kontextu a požadavcích na výkon.