通用类的设计,可以问任何类型的问题,并提供答案?

问题描述 投票:0回答:1

我打算设计一个通用的提问类库,用户可以提出任何类型的问题(包括对该问题的回答)。下面是我实现的设计。谁能看一下,如果需要修改,请提出建议?

public interface IQuestion
{
    void AskQuestion();
}

public abstract class Question:IQuestion
{
    public string QuestionString { get; set; }

    public Question()
    {
        QuestionString = string.Empty;
    }

    public Question(string QuestionString)
    {
        this.QuestionString = QuestionString;
    }

    public abstract void AskQuestion();
}

public class ChoiceQuestion: Question
{
    public List<string> ChoiceList { get; set; }

    public ChoiceQuestion(string QuestionString, List<string> Choices) 
        :base(QuestionString)
    {
        ChoiceList = Choices;
    }

    public override void AskQuestion()
    {
        Console.WriteLine(QuestionString);
        foreach(string opt in ChoiceList)
        {
            Console.Write(opt + "\t");
        }
        Console.WriteLine("\n=======================================================");
    }
}

public class MultipleChoiceQuestion : ChoiceQuestion
{
    public List<string> CorrectChoices { get; set; }

    public MultipleChoiceQuestion(string QuestionString, List<string> Choices, List<string> CorrectList) 
        : base(QuestionString, Choices) 
    {
        CorrectChoices = CorrectList;
    }
}

public class OptionalChoiceQuestion : ChoiceQuestion
{
    public string Answer;

    public OptionalChoiceQuestion(string QuestionString, List<string> Choices, string CorrectChoice)
        : base(QuestionString, Choices)
    {
        Answer = CorrectChoice;
    }
}



class Program
{
    static void Main(string[] args)
    {
        Question q = new OptionalChoiceQuestion("How many rings are on the Olympic flag?", new List<string> { "None","4","5","7"}, "5");
        q.AskQuestion(); // Output to console.

        q = new MultipleChoiceQuestion("Which of these are wild animals?", new List<string> { "Tiger", "Dog", "Cat", "Elephant", "Horse" }, new List<string> { "Tiger" , "Elephant" });
        q.AskQuestion(); // Output to console.
    }
}

请提供一个相同的通用设计。

c# polymorphism multiple-inheritance
1个回答
0
投票

这个本身其实没有什么问题,但是你应该考虑一下,你是否真的需要一个Interface的抽象类,或者你是否可以只用一个抽象类或者一个接口来代替。

如果你需要在其他地方使用IQuestion(例如客户端),或者将传递IQuestion的实现,而不是Question,那么这样做是有意义的。

如果您允许在未来灵活扩展,并在Interface级别上有不同的变化。

如果你只在一个单独的抽象类中使用它,你只会创建这个Question基类的子孙的具体实例,那么我建议你不要真的需要这个,你已经过度设计了。

© www.soinside.com 2019 - 2024. All rights reserved.