Поведение оператора == зависит от того, как была объявлена переменная, к которой вы его применяете (не от класса объекта, я добавлю пример).
Для типов значений он сравнивает их значения.
Для ссылочных типов a == b возвращает true, если a является тем же объектом, что и b, если только оператор == не был перегружен. Не переопределяя, как говорили другие, вы не можете переопределить операторы в C #, потому что они не являются виртуальными.
object obj_a, obj_b;
string str_a, str_b;</p>
<pre><code> 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();
Вывод этой программы
str_a == str_b = True
str_a.Equals(str_b) = True
obj_a == obj_b = False
obj_a.Equals(obj_b) = True