2009-12-28 5 views
3

Généralement I Utilise des interfaces ou des classes de base comme types de paramètres lors du passage d'objets dérivés à une méthode. Par exempleClasse non générique descendante dans la classe générique de base

Method1(ICar car); 
Method2(BaseClass derivedClass); 

Mais qu'en est une classe de base générique lorsque la classe descendante est pas générique?

public class GenericBaseClass<T> where T : BaseClass 
{} 

public class GenericDerivedClass1 : GenericBaseClass<DerivedClass1> 
{} 

Je peux écrire quelque chose comme

Method3(GenericBaseClass<BaseClass> class); 

mais je ne peux pas passer à cette méthode objet am de type GenericDerivedClass1.

Y at-il un moyen de transmettre ma classe descendante à cette méthode?

Répondre

5

Vous devez faire votre Méthode 3 générique:

private void Method3<T>(GenericBaseClass<T> baseClass) 
{ 

} 

et vous pouvez l'appeler comme ceci:

Method3(new GenericDerivedClass1()); 
1

Une solution consiste à utiliser la classe de base non générique pour vos génériques:

abstract class GenericBaseClass 
{ 
} 

public class GenericDerivedClass1<T> : GenericBaseClass where T : DerivedClass1 
{ 
} 

Une autre solution consiste à utiliser des interfaces telles qu'indiquées dans l'article this.

Questions connexes