C# 从父类型实例化子类型

C# 从父类型实例化子类型,c#,inheritance,C#,Inheritance,我有一个基本类型,它将一个问题的信息存储在一个问题库中,用于生成练习题集以帮助人们学习多项选择题。其中存储的唯一信息是答案、提示和问题编号。当我创建一个实践测试时,我需要使用一些属性来扩充类型以存储提交的答案(测试可以部分进行),因此我创建了以下类: public class MultipleChoiceQuestion { public Int32 Number { get; internal set; } public String Prompt { get; interna

我有一个基本类型,它将一个问题的信息存储在一个问题库中,用于生成练习题集以帮助人们学习多项选择题。其中存储的唯一信息是答案、提示和问题编号。当我创建一个实践测试时,我需要使用一些属性来扩充类型以存储提交的答案(测试可以部分进行),因此我创建了以下类:

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)
    {
        ...
    }
}
最初我将multipleChiceQuestion作为PracticeTestQuestion的一个成员,但它在我的属性访问器中添加了许多额外的点,因此我将其更改为继承上面列出的类。目前,我正在为构造函数中的行分配所有的属性,但感觉有点麻烦,我想知道是否有更好的方法


C#编译器不喜欢将类型升迁是有充分理由的,所以我的问题是,从多个EchoiceQuestion基类型实例化PracticeTestQuestions的最佳方式是什么?

我的第一个本能反应是使用工厂创建问题。你向工厂索要MCQ或PTQ,工厂会做出正确的决定


这也可以扩展到文章问题、真假等。

我会在
multiplechicequestion
中添加一个构造函数,它接受另一个
multiplechicequestion
。如果有必要,它可以在构造函数中分配每个属性,但这更合适,因为它知道自己的属性

然后在
练习测试问题中,您可以执行以下操作:

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

就这样吧。

谢谢,这比我现在做的要优雅得多,而且可以重复使用?