我想在使用对象引用时访问其中一个属性(作为默认属性)。有可能吗?

时间:2015-07-12 14:51:01

标签: c#

我有这堂课:

    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对象。可能吗?因此,使用我的对象要简单得多。

1 个答案:

答案 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重载。