Sygnał wyjściowy poniżej kodu jest następujący:== przeciążenia operatora, gdy obiekt jest zapakowane
nierówny
równa
zauważyć różnicę typu X i Xi oraz które = = Przeciążenie operatora jest wykonywane tylko w drugim przypadku, a nie w pierwszym.
Czy istnieje sposób, że mogę przeciążać operatora == tak, że jego zawsze jest wykonywany podczas porównywania między instancjami MyDataObejct.
Edytuj 1: # tutaj chcę zastąpić operatora == w MyDataClass, nie jestem pewien, jak mogę to zrobić, aby case1 również wykonał przeciążenie == implementacji.
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);
}
}
Co jest powodem do zainteresowania się, dlaczego operatorzy nie są polimorficzni? Wydaje mi się, że polimorfizm byłby bardziej intuicyjny. – Welbog
, ale który wygrałby? w a == b, jaka metoda jest wywoływana? szczególnie jeśli a/b są różnymi podtypami ... –
Również - polimorfizm utrudniłby stosowanie zer w operatorach. –