No estoy seguro de lo que estoy haciendo mal aquí. Tengo una clase genérica, que es básicamente un número entero glorificado, con algunos métodos para cierta cadena de formato, así como en/de cuerda y int conversiones:¿Se heredan los métodos de conversión de implícita/explícita en C#?
public class Base
{
protected int m_value;
...
// From int
public static implicit operator Base(int Value)
{
return new Base(Value);
}
...
// To string
public static explicit operator string(Base Value)
{
return String.Format("${0:X6}", (int)Value);
}
}
y funciona bien. Puedo utilizar con éxito las conversiones implícitas y explícitas:
Base b = 1;
Console.WriteLine((string)b); // Outputs "$000001", as expected.
Entonces se derivan de esta clase, diferentes clases hijas, que se convierten en diferentes bits de activación/desactivación nombrados en m_Value. Por ejemplo:
public class Derived : Base
{
}
Y entonces no puedo usar mi implícita a/desde int conversiones:
Derived d = 3;
// Cannot implicitly convert type 'int' to 'Derived'. An explicit conversion exists (are you missing a cast?)
Incluso esto le da el mismo error:
Derived d = (int)3;
son las conversiones implícitas/explícitos no heredado en la clase derivada? Esto requerirá una gran cantidad de copia de código si no es así.
RESPUESTA ¡Muchas gracias por las respuestas rápidas! Todos se merecen la marca de verificación 'respuesta', son todas muy buenas respuestas. La clave es pensar en los tipos en ambos lados del signo igual. Ahora que lo pienso así, tiene mucho sentido.
Obviamente, solo tengo que volver a escribir mis conversiones "en derivadas". Las conversiones "a Int32, cadena, etc." aún se aplican.
Para más detalles sobre algunas de las sutilezas de cómo funciona todo esto, es posible que desee leer mi artículo sobre el tema: http://blogs.msdn.com/ericlippert/archive/2007/04/16 /chained-user-defined-explicit-conversions-in-c.aspx –