2010-12-11 58 views
2

Merci à l'avance,C#: Comment utiliser une variable de classe dérivée const dans le constructeur de la base

Ma situation est que j'ai une classe abstraite appelée véhicule qui détient:

private List<Tire> m_Tires; 

La chose est que le nombre de pneus dans la liste est déterminé dans les classes dérivées et varie entre les uns et les autres, mais le code nécessaire pour l'instanciation est le même et donc je préférerais éviter la duplication de code et placer ce code (instancié m_Tires) dans le résumé Véhicule constructeur de la classe.

J'ai d'abord pensé utiliser protected abstract void initializeTires(); pour être implémenté dans les classes dérivées et être appelé depuis le constructeur de Vehicle. J'ai vu ici que la programmation est mauvaise et que les erreurs sont fréquentes.

Donc, pour faire une histoire courte: Est-il possible d'éviter la duplication de code ici ou je vais devoir faire la paix avec elle?

+1

Vous pouvez passer le nombre de pneus en tant que paramètre à la classe de base. – CodesInChaos

Répondre

4

Vous pouvez créer un constructeur protected et la chaîne elle.

+0

Merci pour la réponse super rapide. Je ne sais pas comment ça m'a manqué. Vous avez résolu mon problème. – alonmo

1

Que diriez-vous de créer un:

initializeTires(int numberOfTyres); 

dans la classe de base et appeler cela avec le paramètre correct dans la classe dérivée.

1

@Oded et un exemple de c'est

public abstract class MyAbstract { 
    private List<Tire> m_Tires; 

    protected MyAbstract(int count) { 
     m_Tires = new List<Tire>(count); 
    } 
} 

public class MyClass : MyAbstract { 
    public MyClass(int count) : base(count) { } 
} 
+0

En fait ce qui conviendra le mieux dans mon cas est: public abstract class Véhicule { privé Liste m_Tires; véhicule protégé (int i_NumOfTires) { m_Tires = nouveau Liste (i_NumOfTires); }} public class Voiture: Véhicule {private int const k_NumOfTires = 4 Parking public(): Base (k_NumOfTires) {}} – alonmo

+0

ouais, je suis un peu confus avec des informations contradictoires ... vous avez mentionné vous deviez initialiser basé sur un nombre, mais votre exemple init-method n'a pris aucun argument :) –

+0

Je vois où vous étiez confus, mon intention était que initializeTires se réfère directement à la variable const. Il me semblait clair quand je l'ai écrit, mais je vois que cela peut être un peu déroutant. – alonmo