2010-03-30 9 views
1

Je suis relativement nouveau à la POO et je me demandais si vous pouviez fournir de l'aide sur la meilleure solution pour ce qui suit.Type de spécialisation Liste des changements sur la classe dérivée

public class GenericClass 
{ 
    private List<GenericListItem> _listItems; 
} 

public class SpecificClass : GenericClass 
{ 
    // I'd like to change the listItems specialisation to SpecificListItem (inherits from GenericListItem) 
} 

Comment pourrais-je réaliser le changement de spécialisation pour la collection? Dois-je créer une méthode virtuelle lors de l'ajout à la collection et redéfinir pour spécifier le type correct (SpecificListItem)? Puis le cast à SpecificListItem lors de l'accès?

Veuillez accepter mes excuses, ceci est mon premier article donc il peut être vague. Si je dois donner plus d'informations s'il vous plaît faites le moi savoir. Aussi, je suis désolé pour mon ignorance dans cette question!

Merci beaucoup,

Sam

+0

Si votre specificListItem hérite de GenericListitem alors vous pouvez le lancer directement je pense, mais vous obtiendrez seulement l'information pour les propriétés qui sont leurs dans GenericListItem –

Répondre

2

Vous pouvez faire GenericClass générique:

public class GenericClass<T> where T : GenericListItem 
{ 
    private List<T> _listItems; 
} 

public class SpecificClass : GenericClass<SpecificListItem> 
{ 
    // ... 
} 

qui peuvent ou peuvent ne pas être approprié - cela dépend vraiment de ce que vous voulez faire avec le liste, et ce que ces classes sont responsables en premier lieu.

+0

Merci pour la réponse Jon, je n'ai aucune implémentation concrète pour l'utiliser et était vraiment juste "penser à haute voix" mais votre réponse est un excellent point de départ pour moi. Lorsque j'ai une raison valable de faire quelque chose comme ça, j'élargis ma requête, sinon c'est «bienvenue dans le monde des génériques» pour moi! –

Questions connexes