выходе ниже кода выглядит следующим образом:== Оператор перегрузки, когда объект в штучной упаковке
не равна
равна
Обратите внимание на разницу в типе х и хх и что = = перегрузка оператора выполняется только во втором случае, а не в первом.
Есть ли способ, которым я могу перегрузить оператор == так, чтобы его всегда выполнял при сравнении между экземплярами MyDataObejct.
Редактировать 1: # здесь я хочу переопределить оператор == на MyDataClass, я не уверен, как это сделать, чтобы case1 также выполнял перегруженную реализацию.
class Program {
static void Main(string[] args) {
// CASE 1
Object x = new MyDataClass();
Object y = new MyDataClass();
if (x == y) {
Console.WriteLine("equal");
} else {
Console.WriteLine("not equal");
}
// CASE 2
MyDataClass xx = new MyDataClass();
MyDataClass yy = new MyDataClass();
if (xx == yy) {
Console.WriteLine("equal");
} else {
Console.WriteLine("not equal");
}
}
}
public class MyDataClass {
private int x = 5;
public static bool operator ==(MyDataClass a, MyDataClass b) {
return a.x == b.x;
}
public static bool operator !=(MyDataClass a, MyDataClass b) {
return !(a == b);
}
}
Как интересно, почему аргументы за отсутствие операторов являются полиморфными? Мне кажется, что полиморфизм будет более интуитивным. – Welbog
, но который выиграет? в a == b, какой метод вызывается? особенно если a/b - разные подтипы ... –
Также - полиморфизм затруднит использование нулей в операторах. –