Iai*_*oat 6 c# abstract-class operator-overloading
对于以下通用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;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我要实现直接运算符implicit operator K(T val),则会导致编译时错误(CS0556).
我以为我可以尝试链接隐式运算符:
public static implicit operator K(ValueType<T,K> vt){
return (K)val;
}
Run Code Online (Sandbox Code Playgroud)
但是下面的例子仍然抱怨它无法转换:
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);
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我真的想避免明确地施放.
这个问题延伸到我之前提出的另一个问题.
Eri*_*ert 13
实现自己的隐式转换逻辑的规则非常严格,如果你要做这样特别复杂的规则,你应该对规范的6.4.4和10.10.3非常熟悉.
简而言之,您应该知道的一些关键规则是:
| 归档时间: |
|
| 查看次数: |
1444 次 |
| 最近记录: |