Zachowanie operatora == zależy od tego, w jaki sposób została zastosowana zmienna, do której go stosujesz (nie w klasie obiektu, dodam przykład).
Dla typów wartości porównuje ich wartości.
Dla typów odniesienia a == b zwraca wartość true, jeśli a jest tym samym obiektem co b, chyba że operator == był przeciążony. Nie można go przesłonić, jak powiedzieli inni, nie można przesłonić operatorów w języku C#, ponieważ nie są wirtualni.
object obj_a, obj_b; string str_a, str_b;
str_a = "ABC";
str_b = new string("ABC".ToCharArray());
obj_a = str_a;
obj_b = str_b;
Console.WriteLine("str_a == str_b = {0}", str_a == str_b); // in string == operator is overloaded
Console.WriteLine("str_a.Equals(str_b) = {0}", str_a.Equals(str_b)); // string overrides Object.Euqals
Console.WriteLine("obj_a == obj_b = {0}", obj_a == obj_b); // in object == operator is not overloaded
Console.WriteLine("obj_a.Equals(obj_b) = {0}", obj_a.Equals(obj_b)); // Object.Equesl is virtual and overridden method from string will be executed.
Console.ReadKey();
Wyjście z tego programu jest
str_a == str_b = True
str_a.Equals(str_b) = True
obj_a == obj_b = False
obj_a.Equals(obj_b) = True
Wystarczy szybkie info: jeśli przeciążać ==, należy również wdrożyć =!. To samo dotyczy <= and > =. – Tarik