我有一个基本类型,用于在系统的问题池中存储有关问题的信息,该系统生成练习题集以帮助人们学习多项选择题。存储在其中的唯一信息是答案,提示和问题编号。当我创建练习测试时,我需要使用一些属性来扩充类型以存储提交的答案(测试可以部分进行),因此我创建了以下类:
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的最佳方法是什么?
答案 0 :(得分:2)
我会向MultipleChoiceQuestion
添加另一个MultipleChoiceQuestion
的构造函数。如果有必要,它可以在构造函数中分配每个属性,但这更合适,因为它具有自己的属性。
然后在PracticeTestQuestion
,您可以这样做:
public PracticeTestQuestion(MultipleChoiceQuestion question) : base(question) { }
并完成它。
答案 1 :(得分:0)
我的第一个直觉反应是使用工厂来创造问题。您向工厂询问MCQ或PTQ,并创建正确的。
这对论文问题也更具扩展性,真假等等。