【发布时间】:2011-05-14 12:33:50
【问题描述】:
对于以下通用 c# 类,我想将 T 转换为 K:
public abstract class ValueType<T,K> : IValueType<T> where K : ValueType<T,K>,new()
{
public abstract T Value { get; set; }
public static implicit operator ValueType<T,K>(T val)
{
K k = new K();
k.Value = val;
return k;
}
}
如果我要实现直接运算符implicit operator K(T val),它将导致编译时错误 (CS0556)。
我想我可以尝试链接隐式运算符:
public static implicit operator K(ValueType<T,K> vt){
return (K)val;
}
但是下面的例子还是报错不能转换:
public class Test : ValueType<int, Test>
{
public override int Value{ get; set; }
}
Test t = 6; //complains it's unable to be converted
Console.WriteLine(t.Value);
如果可能的话,我真的想避免显式转换。
这个问题延伸到我之前提出的another SO question。
【问题讨论】:
-
我不认为编译器确实将隐式链接应用于强制转换/转换运算符......所以我看不到这里的重点。还是我错过了什么?
-
@Lucero 我想知道是否可以链式转换/转换。如果没有,是否有解决方法?
标签: c# operator-overloading abstract-class