La salida del código de abajo es la siguiente:== operador de sobrecarga cuando el objeto es en caja
no igual
igual
Nota la diferencia en el tipo de X y XX y que = = la sobrecarga del operador solo se ejecuta en el segundo caso y no en el primero.
¿Hay alguna manera de sobrecargar el operador == para que se ejecute siempre cuando se realiza una comparación entre las instancias de MyDataObejct?
Edit 1: # aquí quiero anular el operador == en MyDataClass, no estoy seguro de cómo puedo hacerlo para que case1 también ejecute la implementación sobrecargada ==.
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);
}
}
Como punto de interés, ¿cuál es el razonamiento para no tener operadores polimórficos? Me parece que el polimorfismo sería más intuitivo. – Welbog
, pero ¿cuál ganaría? en a == b, ¿qué método se llama? especialmente si a/b son subtipos diferentes ... –
Además, el polimorfismo dificultaría el uso de nulos en los operadores. –