conversiones implícitas sólo deben ser definidos cuando el tipo se puede convertir en o desde (preferiblemente a y de) otro tipo con sin pérdida de datos. Otro criterio es que las conversiones implícitas deberían ser bastante económicas, ya que el desarrollador que usa su clase probablemente no sepa cuándo ocurren las conversiones implícitas.
Un ejemplo: conversión entre sistemas de coordenadas. Un vector de coordenadas polares que pueda convertirse en coordenadas cartesianas, por ejemplo, podría ser conveniente. Sin embargo, debido al redondeo del punto flotante, sería mejor dejar esto como una conversión explícita, de modo que el programador tenga que encasillar para forzar la conversión.
La conversión implícita puede estar justificada si tiene dos tipos de datos que almacenan datos en el mismo formato, pero la única distinción entre los tipos es semántica: cómo se usan o qué significan. Ejemplo del mundo real: Conversión entre tipos de datos de fecha y hora que tienen la misma representación subyacente (o compatible) pero difieren solo en la fecha de inicio de epoc. Encontrará estos al migrar bases de código antiguas a marcos más recientes donde ambos definen un tipo de fecha y hora, pero la semántica es ligeramente diferente. La conversión implícita aquí (suponiendo que no haya pérdida de datos) probablemente sea correcta y una buena idea.
Si tiene un conjunto de tipos y ha definido sus propias reglas sobre cómo los tipos se pueden convertir entre sí, algunas de esas conversiones pueden ser implícitas y algunas explícitas en función de la "gravedad" de la conversión. La instancia principal de donde he usado la conversión implícita al implementar una clase en .NET fue cuando estaba implementando la semántica de variantes de Win32 para la biblioteca Delphi en tiempo de ejecución. Win32 y el lenguaje Delphi especifican una cantidad de conversiones en datos Variant que se pueden hacer de manera implícita.
Que no haya encontrado la necesidad de crear conversiones implícitas es realmente una buena cosa. El hecho de que puedas no significa que debas. Existen conversiones implícitas en .NET principalmente para permitir que diferentes lenguajes de programación representen su propia semántica de una manera que debería ser interoperable y comprensible para otros lenguajes .NET.
No puedo pensar en ninguna razón real más allá de lo que ya se proporciona a través de los tipos numéricos de .NET. – leppie
Esto debería ser wiki comunitario (sin respuesta definitiva). O reformulado para preguntar cuándo y por qué uno debería o no debería hacerlo. Eso sería mejor. –
@Martinho Ya se aceptó una respuesta, y todavía no es una wiki comunitaria, así que creo que se perdió toda esperanza. :) – bzlm