【发布时间】:2011-08-22 09:44:57
【问题描述】:
我试图偷懒并在抽象基类中而不是在每个派生的具体类中实现强制转换运算符。我已经设法施放一种方式,但我无法施放另一种方式。我认为这可能是不可能的,但想在放弃之前选择集体 SO 思想:
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;
}
}
【问题讨论】:
-
我的一部分认为你可以通过反射来做到这一点,但我大多数人说在派生类中这样做更有意义,因为知道如何从 T 出发是个体派生类的工作对它来说,不是抽象类的工作。
-
实际上,我认为即使使用反射也无法做到,因为它们是静态方法,而我认为需要实例方法。
-
@Matt Ellen 我同意最好在具体类中执行此操作,但我宁愿编写一次方法而不是将其复制到数十个派生类中。
标签: c# generics abstract-class operator-keyword