我試圖懶惰並在抽象基類而不是每個派生的具體類中實現演員操作符。我已經設法施展了一種方式,但我無法施展另一種方式。我想可能是不可能的,但要挑集體放棄以前那麼介意:在通用抽象類中實現一個演員操作符
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到它,而不是T的工作他抽象類。 – 2011-05-10 11:53:11
其實,我認爲即使使用反射也不能做到這一點,因爲它們是靜態方法,而我在想的是實例方法。 – 2011-05-10 11:57:30
@Matt Ellen我同意最好在具體類中做,但我寧願寫一次方法,而不是將它複製到幾十個派生類中。 – 2011-05-10 12:03:10