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