Грамотная реализация создания экземпляров - 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 { } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д