我有这堂课:
public class NodeData<T>
{
public string Name;
public T Value;
public NodeData(string name, T value){
this.Name = name;
this.Value = value;
}
}
NodeData data = new NodeData<int>("test",111);
如何使用data
代替data.Value
我的意思是var a = data;
a应该是int 111而不是NodeData对象。可能吗?因此,使用我的对象要简单得多。
答案 0 :(得分:2)
在课程内你可以有一个操作员:
public static implicit operator T(NodeData<T> data)
{
return data.Value;
}
用法:
var data = new NodeData<int>("test", 111);
int a = data; // OK
它不适用于var
声明中的a
。
现在我在你编辑它之前阅读了你的问题。假设一个方法像这样重载:
void WriteLine(object o);
void WriteLine(int i);
然后与data
一样,电话:
WriteLine(data)
将按以下方式解决(简化):第一次重载适用于简单引用转换,因为NodeData<>
派生自object
。第二个重载也适用于您的用户定义的implicit
转换运算符。由于两种重载都适用,我们需要尝试找到更好的&#34;两个中的一个。 int
版本更好,因为int
可隐式转换为object
(通过装箱转换),而object
不可隐式转换为int
(并非所有对象)是整数)。
最后,在绑定时选择int
重载。