2011-08-07 13 views
2

TupleプロパティがTuple<int>Tuple<string>のようないくつかのタプルを受け取る方法を探しています。次のコードは、私がやろうとしている例です。Tupleプロパティを一般化することは可能ですか?

public class A 
{ 
    public virtual Tuple Condition 
    { 
     get; 
     set; 
    } 
} 

public class B: A 
{ 
    public override Tuple<int, string> Condition 
    { 
     get; 
     set; 
    } 
} 

私はクラスからConditionプロパティを使用して、Bのような他のクラスでそれを使用し、それを特定のタプルをasignしたいと思います。

+2

タプルをAPIの一部として公開することは、めったに良い考えではありません。あなたは本当にモデル化しようとしていますか? –

答えて

3

2つの問題:

  1. Tuple<T1, T2>Tuple異なるクラスであり、メソッド/プロパティの上書きは、戻り値の型で多型をサポートしていません。

  2. Tuple<T1, T2>Tupleから継承しないため、とにかく動作しません。

あなたはobjectであることが、必要なときにだけ、前後にキャストするvirtualプロパティを宣言する必要があります。あるいは、Conditionプロパティが本当に表すものについて考えることができます。おそらくカスタムクラスはTupleよりも柔軟性が高いと証明されます。

1

いいえ、署名が一致しないため、できません。

public class A 
{ 
    public object Condition 
    { 
     get; 
     set; 
    } 
} 

public class B: A 
{ 
    public void SetCondition(Tuple<int, string> condition) 
    { 
     base.Condition = condition; 
    } 
} 

はしかし、あなたが探していると、限定された意味を持っている:あなたが考えるかもしれ

最も近いパターンは次のようです。どのようにして「汎用」タプルを使用できますか?この時点では、オブジェクトと考える方が良いです。このアプローチの

関連する問題