Я стараюсь быть ленивым и реализовывать операторы литья в абстрактном базовом классе, а не в каждом из производных конкретных классов. Мне удалось сделать один способ, но я не могу отбросить другого. Я думаю, что это может быть невозможно, но хотел выбрать коллективный разум, прежде чем отказаться:
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;
}
}