Sobes.tech
Middle

Jaka jest różnica między metodą Equals a operatorem == w C#?

sobes.tech AI

Odpowiedź od AI

Różnica polega na tym, jak porównują obiekty:

Metoda/Operator Opis Porównanie dla typów referencyjnych Porównanie dla typów wartości Przeciążenie
Equals() Wirtualna metoda klasy object, może być nadpisana. Domyślnie porównuje referencje (jeśli nie nadpisano). Porównuje wartości pól (przy nadpisaniu lub dla wbudowanych). Możliwe
== Operator nadpisywalny. Domyślnie porównuje referencje (dla typów referencyjnych). Domyślnie porównuje wartości (dla typów wartości). Możliwe

Przykłady:

// Porównanie typów referencyjnych
string s1 = new string("hello");
string s2 = new string("hello");
string s3 = s1;

Console.WriteLine(s1.Equals(s2)); // True (przy nadpisaniu Equals w string)
Console.WriteLine(s1 == s2);     // False (porównywane referencje)
Console.WriteLine(s1 == s3);     // True (te same referencje)
// Porównanie typów wartości
int a = 10;
int b = 10;
int c = 20;

Console.WriteLine(a.Equals(b)); // True (porównywane wartości)
Console.WriteLine(a == b);     // True (porównywane wartości)
Console.WriteLine(a == c);     // False (różne wartości)

Ważne jest, aby pamiętać, że operator == może być nadpisany dla typów niestandardowych, aby zmienić jego domyślne zachowanie. Metoda Equals() również może być nadpisana, aby zaimplementować własną logikę porównania obiektów. W większości przypadków do porównywania wartości typów referencyjnych zaleca się używanie Equals(), a dla typów wartości — Equals() lub ==, w zależności od kontekstu i wymagań wydajnościowych.