2009-03-10 7 views
-1

Comment dois-je mettre en œuvre, en C#, une classe contenant une propriété avec le type de quelque chose et cet exemple de quelque chose:Type dépend de la valeur enum

public class MyObject{ 
    public someEnum e { get; set;} 
    public Object ObjectDependentOnE { get; set; } 
} 

Je veux être en mesure de retourner le bon type pour mon objet qui dépend de mon énumération. par exemple, si e = 1, mon objet est de type T1 ...

ou peut-être que j'essaie de faire somethng mal

une idée?

Répondre

4

Je ne suis pas sûr de ce que vous essayez vraiment de faire, mais il semble que les médicaments génériques est ce que vous recherchez:

public class MyObject<T> 
{ 
    public T SomeProperty{get;set;} 
} 

Vous pouvez contrainte T aux classes qui mettent en œuvre une interface donnée.

utilisation serait:

MyObject<SomethingClass> something = new MyObject<SomethingClass>; 
+0

Ce que pas exactement ce que j'avais en tête mais je suppose que ça va devoir faire –

0

Je ne sais pas ce que votre cas d'utilisation serait - plus d'informations pourraient aider à répondre à ce mieux, mais de mon estimation, vous voudrez peut-être envisager de faire une classe d'usine au lieu . Quelque chose comme:

class MyClass 
{ 
    public SomeEnum E { get; set; } 
    // This might be better as : public Object GetTheObject(SomeEnum E) and eliminating the above property 
    public Object GetTheObject() 
    { 
     switch(this.E) 
     { 
     case E.Something: 
      return new MySomethingObject(); // Or return an instance that already exists...? 
     default: 
      return new MyDefaultObject(); 
     } 
    } 
} 

Cela pourrait aussi être une propriété avec un getter et setter, et obtenir et définir le type d'objet spécifique.

Cependant, je recommande d'envisager de repenser l'approche - cela semble être une conception très sujette aux erreurs, car elle n'a aucune sécurité de type au moment de la compilation, et est très déroutante du point de vue du consommateur.

Questions connexes