是否可以基于构造函数中传递的Enum值在C#中创建类的对象?

时间:2016-08-25 15:26:40

标签: c# constructor properties enums

我正在创建一个小项目,用户可以在其中创建包含多项选择题的测试。这些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概念都可以用来实现这一目标我很困惑。任何帮助将非常感激。谢谢!

3 个答案:

答案 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
}