Mi sono sempre chiesto come funzionasse l'override degli operatori in C# 1.X... CLS 1 non prevede l'override degli operatori...
public static bool operator == (Classe a, Classe b) {return false;}
public static bool operator != (Classe a, Classe b) {return false;}
Compilo classe e reflecto... ed ecco svelato l'arcan
Classe ha due belle Function:
Public Shared Function op_Equality(ByVal a As Classe, ByVal b As Classe) As Boolean
Public Shared Function op_Inequality(ByVal a As Classe, ByVal b As Classe) As Boolean
Creo un metodo che contiene (in C#):
Console.WriteLine(a == b);
dove a e b sono istanze di Classe
Provo a decompilare (*) e cosa vedo? E poi guardando il codice IL:
L_0008: call Classe.op_Equality
....mmmhhh... ben diverso dall'atteso... Non c'é un'istruzione ceq (o qualcosa del genere) nell'Intermediate Language? Certo, dietro le quinte non é il massimo della vita, ma dal punto di vista dell'OOP é una favola!
Chissà come é implementato in Whidbey con le CLS2...
* Ho usato Reflector, ma ultima versione, le precedenti traducono in VB usando l'operatore = al posto di Is