Грамотная реализация создания экземпляров - C#
Формулировка задачи:
Добрый вечер.
Есть программка (для создания тестов), которая при запуске создаёт экземпляр класса TestDocument.
В TestDocument хранить общая информация о тесте (имя теста, время на тест...), а также там создавался экземпляр класса TestPage.
Все было неплохо, пока не появилась необходимость создавать задания другого типа (до этого - один вопрос и один верный вариант ответа, а сейчас один вопрос и несколько верных вариантов ответов). В зависимости от типа вопроса мне необходимо создавать объекты разных классов. Для первого случая - объект класса TestPage, а для второго скажем TestPage2. Как это можно реализовать, ведь создание объекта TestPage происходит при запуске программы и не зависит от типа ответа?
Весь тест сохранялся в XML файл
Фрагмент кода из Form1.cs:
Фрагмент кода из TestDocument.cs:
Фрагмент кода из TestPage.cs:
<?xml version="1.0"?>
<TestDocument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<position>1</position>
<questionCoint>1</questionCoint>
<page>
<TestPage>
<answer>
<string>Ответ 1</string>
<string>Ответ 2</string>
<string>Ответ 3</string>
</answer>
<chAnswer>
<boolean>true</boolean>
<boolean>false</boolean>
<boolean>false</boolean>
</chAnswer>
<question>Вопрос 1 Одиночный</question>
<typeQuestion>1</typeQuestion>
</TestPage>
</page>
<pTestName />
<pTsestTime>0001-01-01T00:00:00</pTsestTime>
</TestDocument>
TestDocument document = new TestDocument();
[Serializable]
public class TestDocument
{
public int position=0;
public int questionCoint = 0;
// Коллекция вопросов и ответов
public List<TestPage> page = new List<TestPage>();
// ***Свойства теста
// *Основные
// Название теста
public string pTestName="";
// Время теста
public DateTime pTsestTime;
} [Serializable]
public class TestPage
{
public string question{get;set;} //Текст вопроса
public int typeQuestion { get; set; } // Тип вопроса (1 - одиночный, 2 - множественный)
public List<string> answer = new List<string>(); // Варианты ответов
public List<bool> chAnswer = new List<bool>(); // Чекбоксы хранящие true или false
}Решение задачи: «Грамотная реализация создания экземпляров»
textual
Листинг программы
XmlSerializer xml = new XmlSerializer(typeof(TestDocument));
// Настройка окна сохранения документов
SaveFileDialog save = new SaveFileDialog();
save.Filter = "test files (*.tst)|*.tst";
save.RestoreDirectory = true;
// Сохранение в файл
if (save.ShowDialog() == DialogResult.OK)
{
if (save.FileName != null)
{
using (var fStream = new FileStream(save.FileName, FileMode.Create, FileAccess.Write, FileShare.None))
{
// Сериализация
try
{
xml.Serialize(fStream, document);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message.ToString(), ex.Source.ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
}
}
}
}