是否有可能推广元组属性?

时间:2011-08-07 05:05:38

标签: c# oop

我正在寻找一种方法,使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

2 个答案:

答案 0 :(得分:3)

这种方法存在两个问题:

  1. Tuple<T1, T2>Tuple是不同的类,方法/属性覆盖不支持返回类型中的多态。

  2. 即使他们这样做,Tuple<T1, T2>也不会继承Tuple,所以无论如何它都无法正常工作。

  3. 您需要将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;
    }
}

然而,你所寻找的是有限的意义。你可以用哪种方式使用“通用”元组?在这一点上,最好考虑一个对象。