我正在创建一个小项目,用户可以在其中创建包含多项选择题的测试。这些MCQ可以有一个正确的答案,也可以有多个。我已经按如下方式定义了类:
onchange
我要做的是将public class MultipleChoiceQuestionSingle : Question
{
public string[] Options { get; set; }
public int CorrectOption { get; set; }
}
public class MultipleChoiceQuestionMultiple : Question
{
public string[] Options { get; set; }
public int[] CorrectOptions { get; set; }
}
的构造函数设为
MultipleChoiceQuestion
是否可以分别使用属性public MultipleChoiceQuestion(McqType mcqType)
{
}
public enum McqType
{
SingleAnswer = 0,
MultipleAnswers = 1
}
或MultipleChoiceQuestion
为单个答案或多个答案创建string[] Options & string CorrectOption
的实例,具体取决于启动对象时选择的Enum值?我一直试图玩一段时间,如果任何OOPS概念都可以用来实现这一目标我很困惑。任何帮助将非常感激。谢谢!
答案 0 :(得分:2)
是的,这叫做factory method。这是一种非常常见的设计模式。我假设你不需要一些示例代码,因为它非常简单。您似乎只想证实自己的方法。
答案 1 :(得分:0)
是:
public MultipleChoiceQuestion(McqType mcqType)
{
Question q;
switch (mcqType) {
case SingleAnswer:
q = new MultipleChoiceQuestionSingle();
break;
case MultipleAnswers:
q = new MultipleChoiceQuestionMultiple();
break;
}
}
答案 2 :(得分:0)
冒着使线程脱轨的风险,我需要指出一些问题。您的所有问题都 n 正确答案。对于某些问题, n 是1,而对于其他问题,它不止于此。我认为你不需要两个类和一个SOLID破解案例陈述来模拟这个事实。
只需使用一个Question
课程,并让一些问题只有一个正确的答案。
此外,不是有一个答案数组,而是一个单独的正确索引数组,正确性是答案的属性。你最终得到这样的东西:
class Answer
{
public string Text { get; set; }
public bool Correct { get; set; }
}
class Question
{
public string QuestionText { get; set; }
public List<Answer> Answers { get; set; }
}
void Main()
{
var test = new List<Question>
{
new Question
{
QuestionText = "What colour is the sky?",
Answers = new List<Answer>
{
new Answer { Text = "Blue", Correct = true },
new Answer { Text = "Red", Correct = false },
new Answer { Text = "Green", Correct = false }
}
},
new Question
{
QuestionText = "Which animals can swim?",
Answers = new List<Answer>
{
new Answer { Text = "Ducks", Correct = true },
new Answer { Text = "Fish", Correct = true },
new Answer { Text = "Horses", Correct = false }
}
}
};
// do stuff with the test
}