2009-10-09 75 views
0

我有一個基本類型,它存儲有關問題的問題信息,以便生成練習問題集以幫助人們學習多選題測試。存儲在其中的唯一信息是答案,提示和問題編號。當我創建了一個實踐的檢驗,我需要一些屬性來存儲提交(測試可以採取部分)的答案,增加的類型,所以我創建了以下類:從父類型實例化一個孩子

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) 
    { 
     ... 
    } 
} 

本來我有MultipleChoiceQuestion只是PracticeTestQuestion的一員,但它在我的屬性訪問器中添加了很多額外的點,所以我將它改爲繼承上面列出的類。目前,我正在爲構造函數中的行分配所有屬性行,但感覺有點麻煩,我想知道是否有更好的方法。

C#編譯器不喜歡升遷類型的原因很好,所以我的問題是從他們的MultipleChoiceQuestion基類型實例化PracticeTestQuestions的最佳方法是什麼?

回答

2

我會一個構造函數添加到MultipleChoiceQuestion是另需MultipleChoiceQuestion。如果有必要,它可以在構造函數中分配每個屬性,但這更合適,因爲它具有其自身屬性的知識。

然後在PracticeTestQuestion,你可以做:

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

,並用它做。

+0

謝謝,這比我在做的事情更加優雅和可重用? – 2009-10-10 01:13:43

0

我的第一個直覺反應是使用工廠來創建問題。您向工廠詢問MCQ或PTQ,並創建正確的一個。

這也是更可擴展到作文題,真的假的,等