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) { }
就这样吧。谢谢,这比我现在做的要优雅得多,而且可以重复使用?