2011-08-07 2 views
2

Je cherche un moyen qu'une propriété Tuple peut recevoir plusieurs tuples comme Tuple<int>, Tuple<string>. Le code suivant est un exemple que je suis en train de faire:Est-il possible de généraliser une propriété Tuple?

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

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

Je voudrais utiliser la propriété Condition d'une classe, et l'utiliser dans d'autres classes comme B et ASIGN il un Tuple spécifique.

B b = new B(); 
B.Condition = Tuple.Create(2, "Bella"); 

A a = b; 
a.Condition // Here must show B.Condition 
+2

L'exposition d'un Tuple dans le cadre d'une API est rarement une bonne idée. Qu'est-ce que vous essayez vraiment de modéliser? –

Répondre

3

Deux problèmes avec cette approche:

  1. Tuple<T1, T2> et Tuple sont différentes classes, et la méthode/propriété overrides ne prennent pas en charge polymorphisme dans les types de retour.

  2. Même s'ils l'ont fait, Tuple<T1, T2> n'hérite pas de Tuple, donc cela ne fonctionnerait pas de toute façon.

Vous devez déclarer la propriété virtual être de object et puis juste jeté avant et en arrière en cas de besoin. Vous pouvez également penser à ce que représente réellement votre propriété Condition; peut-être une classe personnalisée se révélera plus flexible que Tuple s.

1

Non, vous ne pouvez pas parce que la signature ne correspond pas.

Le modèle le plus proche, vous pouvez envisager est la suivante:

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

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

Cependant, ce que vous cherchez a un sens limité. De quelle manière pourriez-vous utiliser un Tuple "générique"? À ce stade, il est préférable de penser à un objet.

Questions connexes