Crear una conversión explícita o implícita:
public class Foo
{
public static explicit operator int(Foo instance)
{
return 0;
}
public static implicit operator double(Foo instance)
{
return 0;
}
}
La diferencia está, con las conversiones explícitas que tendrá que hacer el tipo Arrójate:
int i = (int) new Foo();
y con conversiones implícitas, solo puede "asignar" cosas:
double d = new Foo();
MSDN tiene esto que decir:
"Al eliminar conversiones innecesarias, las conversiones implícitas pueden mejorar la legibilidad del código fuente. Sin embargo, dado que las conversiones implícitas no requieren que los programadores emitan explícitamente de un tipo a otro, se debe tener cuidado para evitar resultados inesperados. En general, los operadores de conversión implícitos nunca deben arrojar excepciones y nunca perder información para que puedan usarse de forma segura sin la conciencia del programador. Si un operador de conversión no puede cumplir esos criterios, debe marcarse explícitamente. "(El énfasis es mío)
¿Qué esperas que haga? I.o.w, ¿cómo se ve Foo? –