Estoy tratando de ser flojo e implementar los operadores de conversión en la clase base abstracta en lugar de en cada una de las clases concretas derivadas. He logrado lanzar de una manera, pero no puedo lanzar la otra. Creo que tal vez no sea posible, pero quería recoger el colectivo SO mente antes de renunciar:implementando un operador de conversión en una clase abstracta genérica
public interface IValueType<T>
{
T Value{ get; set; }
}
public abstract class ValueType<T> : IValueType<T> {
public abstract T Value { get; set; }
public static explicit operator T(ValueType<T> vt) {
if(vt == null)
return default(T);
return vt.Value;
}
public static implicit operator ValueType<T>(T val) {
ValueType<T> vt = new ValueType<T>(); //<--- obviously this won't work as its abstract
vt.Value = val;
return vt;
}
}
parte de mí piensa que podría hacer esto con la reflexión, pero la mayor parte de mi dice que tiene más sentido hacerlo en las clases derivadas, porque es el trabajo de la clase derivada individual saber cómo pasar de T a él, no el trabajo de t él clase abstracta. –
En realidad, no creo que puedas hacerlo incluso con reflexión, ya que son métodos estáticos, y lo que estaba pensando requería métodos de instancia. –
@Matt Ellen Estoy de acuerdo en que es mejor hacerlo en las clases concretas, pero prefiero escribir el método una vez en lugar de copiarlo en docenas de clases derivadas. –