Грамотная реализация создания экземпляров - C#

Узнай цену своей работы

Формулировка задачи:

Добрый вечер. Есть программка (для создания тестов), которая при запуске создаёт экземпляр класса TestDocument. В TestDocument хранить общая информация о тесте (имя теста, время на тест...), а также там создавался экземпляр класса TestPage. Все было неплохо, пока не появилась необходимость создавать задания другого типа (до этого - один вопрос и один верный вариант ответа, а сейчас один вопрос и несколько верных вариантов ответов). В зависимости от типа вопроса мне необходимо создавать объекты разных классов. Для первого случая - объект класса TestPage, а для второго скажем TestPage2. Как это можно реализовать, ведь создание объекта TestPage происходит при запуске программы и не зависит от типа ответа? Весь тест сохранялся в XML файл
<?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>
Фрагмент кода из Form1.cs:
        TestDocument document = new TestDocument();
Фрагмент кода из TestDocument.cs:
   [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;
}
Фрагмент кода из TestPage.cs:
    [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 
                        { 
                        
                        }
                    }
                }
 
            }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.5 из 5
Похожие ответы