Creare una conversione esplicita o implicita:
public class Foo
{
public static explicit operator int(Foo instance)
{
return 0;
}
public static implicit operator double(Foo instance)
{
return 0;
}
}
La differenza è, con le conversioni esplicite si dovrà fare il tipo di getto da soli:
int i = (int) new Foo();
e con le conversioni implicite, puoi semplicemente "assegnare" le cose:
double d = new Foo();
MSDN ha questo da dire:
"Eliminando i cast non necessari, le conversioni implicite possono migliorare la leggibilità del codice sorgente. Tuttavia, poiché le conversioni implicite non richiedono ai programmatori di eseguire il cast esplicito da un tipo all'altro, è necessario prestare attenzione per evitare risultati imprevisti. In generale, gli operatori di conversione impliciti non devono mai generare eccezioni e non perdere mai le informazioni in modo che possano essere utilizzate in modo sicuro senza la consapevolezza del programmatore. Se un operatore di conversione non può soddisfare tali criteri, deve essere contrassegnato esplicitamente. "(enfasi mia)
Cosa ti aspetti che faccia? I.o.w, che aspetto ha Foo? –