L'output del codice sotto è come segue:== operatore sovraccarico quando oggetto è inscatolato
diverso
uguale
Nota la differenza di tipo di xe xx e che = = il sovraccarico dell'operatore viene eseguito solo nel secondo caso e non nel primo.
Esiste un modo per sovraccaricare l'operatore == in modo che il suo sia sempre eseguito quando viene eseguito un confronto tra istanze MyDataObejct.
Modifica 1: # qui voglio eseguire l'override dell'operatore == su MyDataClass, non sono sicuro di come posso farlo in modo che case1 esegua anche l'implementazione == sovraccarico.
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);
}
}
Come punto di interesse, qual è il motivo per cui gli operatori non devono essere polimorfici? Mi sembra che il polimorfismo sarebbe più intuitivo. – Welbog
ma quale vincerebbe? in a == b, quale metodo viene chiamato? specialmente se a/b sono sottotipi diversi ... –
Inoltre, il polimorfismo renderebbe più difficile l'utilizzo di null negli operatori. –