2009-10-09 9 views
0

J'ai un type de base qui stocke des informations sur une question dans un groupe de questions pour un système qui génère des ensembles de questions pratiques pour aider les personnes à étudier pour des tests à choix multiples. Les seules informations qui y sont stockées sont les réponses, l'invite et le numéro de question. Lorsque je crée un test pratique, je dois augmenter le type avec des propriétés pour stocker la réponse soumise (le test peut être pris en partie), et je crée les classes suivantes:instanciation d'un enfant d'un type parent

public class MultipleChoiceQuestion 
{ 
    public Int32 Number { get; internal set; } 
    public String Prompt { get; internal set; } 
    public MultipleChoiceAnswer[] Choices { get; internal set; } 

    // constructors, etc... 
} 

public class PracticeTestQuestion : MultipleChoiceQuestion 
{ 
    public MultipleChoiceAnswer AnswerSelected { get; set; } 

    // is this right? 
    public PracticeTestQuestion(MultipleChoiceQuestion question) 
    { 
     ... 
    } 
} 

Au départ, j'ai eu la MultipleChoiceQuestion en tant que membre de PracticeTestQuestion, mais il a ajouté beaucoup de points supplémentaires dans mes accesseurs de propriété, et donc je l'ai changé pour hériter de la classe comme indiqué ci-dessus. Actuellement, j'affecte toutes les propriétés ligne pour la ligne dans le constructeur, et cela me semble un peu lourd, et je me demandais s'il y avait une meilleure façon de procéder.

Le compilateur C# n'aime pas les types de migration ascendante pour de bonnes raisons. Ma question est la suivante: quelle est la meilleure façon d'instancier mes PracticeTestQuestions à partir de leurs types de base MultipleChoiceQuestion?

Répondre

2

Je voudrais ajouter un constructeur à MultipleChoiceQuestion qui prend une autre MultipleChoiceQuestion. Si nécessaire, il peut assigner chacune des propriétés dans le constructeur, mais c'est plus approprié, car il a la connaissance de ses propres propriétés.

Puis, en PracticeTestQuestion, vous pouvez juste faire:

public PracticeTestQuestion(MultipleChoiceQuestion question) : base(question) { } 

et être fait avec elle.

+0

Merci, c'est beaucoup plus élégant et réutilisable que ce que je faisais? –

0

Ma première réaction viscérale est d'utiliser une usine pour créer des questions. Vous demandez à l'usine un QCM ou un PTQ et cela crée le bon.

Ceci est également plus extensible aux questions de rédaction, vrai faux, etc.

Questions connexes