我正在寻找一种方法,使Tuple属性可以接收多个元组,如Tuple<int>
,Tuple<string>
。下一个代码是我正在尝试的一个例子:
public class A
{
public virtual Tuple Condition
{
get;
set;
}
}
public class B: A
{
public override Tuple<int, string> Condition
{
get;
set;
}
}
我想使用A类的Condition属性,并在其他类中使用它,比如B,并将其作为特定的元组。
B b = new B();
B.Condition = Tuple.Create(2, "Bella");
A a = b;
a.Condition // Here must show B.Condition
答案 0 :(得分:3)
这种方法存在两个问题:
Tuple<T1, T2>
和Tuple
是不同的类,方法/属性覆盖不支持返回类型中的多态。
即使他们这样做,Tuple<T1, T2>
也不会继承Tuple
,所以无论如何它都无法正常工作。
您需要将virtual
属性声明为object
,然后在需要时来回转换。或者,您可能想要考虑Condition
属性真正代表的内容;也许自定义类比Tuple
更灵活。
答案 1 :(得分:1)
不,你不能因为签名不匹配。
您可以考虑的最接近的模式如下:
public class A
{
public object Condition
{
get;
set;
}
}
public class B: A
{
public void SetCondition(Tuple<int, string> condition)
{
base.Condition = condition;
}
}
然而,你所寻找的是有限的意义。你可以用哪种方式使用“通用”元组?在这一点上,最好考虑一个对象。