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

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

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

Добрый вечер. Есть программка (для создания тестов), которая при запуске создаёт экземпляр класса TestDocument. В TestDocument хранить общая информация о тесте (имя теста, время на тест...), а также там создавался экземпляр класса TestPage. Все было неплохо, пока не появилась необходимость создавать задания другого типа (до этого - один вопрос и один верный вариант ответа, а сейчас один вопрос и несколько верных вариантов ответов). В зависимости от типа вопроса мне необходимо создавать объекты разных классов. Для первого случая - объект класса TestPage, а для второго скажем TestPage2. Как это можно реализовать, ведь создание объекта TestPage происходит при запуске программы и не зависит от типа ответа? Весь тест сохранялся в XML файл
Листинг программы
  1. <?xml version="1.0"?>
  2. <TestDocument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  3. <position>1</position>
  4. <questionCoint>1</questionCoint>
  5. <page>
  6. <TestPage>
  7. <answer>
  8. <string>Ответ 1</string>
  9. <string>Ответ 2</string>
  10. <string>Ответ 3</string>
  11. </answer>
  12. <chAnswer>
  13. <boolean>true</boolean>
  14. <boolean>false</boolean>
  15. <boolean>false</boolean>
  16. </chAnswer>
  17. <question>Вопрос 1 Одиночный</question>
  18. <typeQuestion>1</typeQuestion>
  19. </TestPage>
  20. </page>
  21. <pTestName />
  22. <pTsestTime>0001-01-01T00:00:00</pTsestTime>
  23. </TestDocument>
Фрагмент кода из Form1.cs:
Листинг программы
  1. TestDocument document = new TestDocument();
Фрагмент кода из TestDocument.cs:
Листинг программы
  1. [Serializable]
  2. public class TestDocument
  3. {
  4. public int position=0;
  5. public int questionCoint = 0;
  6. // Коллекция вопросов и ответов
  7. public List<TestPage> page = new List<TestPage>();
  8. // ***Свойства теста
  9. // *Основные
  10. // Название теста
  11. public string pTestName="";
  12. // Время теста
  13. public DateTime pTsestTime;
  14. }
Фрагмент кода из TestPage.cs:
Листинг программы
  1. [Serializable]
  2. public class TestPage
  3. {
  4. public string question{get;set;} //Текст вопроса
  5. public int typeQuestion { get; set; } // Тип вопроса (1 - одиночный, 2 - множественный)
  6. public List<string> answer = new List<string>(); // Варианты ответов
  7. public List<bool> chAnswer = new List<bool>(); // Чекбоксы хранящие true или false
  8. }

Решение задачи: «Грамотная реализация создания экземпляров»

textual
Листинг программы
  1.             XmlSerializer xml = new XmlSerializer(typeof(TestDocument));
  2.  
  3.             // Настройка окна сохранения документов
  4.             SaveFileDialog save = new SaveFileDialog();
  5.             save.Filter = "test files (*.tst)|*.tst";
  6.             save.RestoreDirectory = true;
  7.  
  8.  
  9.             // Сохранение в файл
  10.             if (save.ShowDialog() == DialogResult.OK)
  11.             {
  12.                 if (save.FileName != null)
  13.                 {
  14.                     using (var fStream = new FileStream(save.FileName, FileMode.Create, FileAccess.Write, FileShare.None))
  15.                     {
  16.                         // Сериализация
  17.                         try
  18.                         {
  19.                             xml.Serialize(fStream, document);
  20.                         }
  21.                         catch(Exception ex)
  22.                         {
  23.                             MessageBox.Show(ex.Message.ToString(), ex.Source.ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error);
  24.                         }
  25.                         finally
  26.                         {
  27.                        
  28.                         }
  29.                     }
  30.                 }
  31.  
  32.             }

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


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

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

6   голосов , оценка 4.5 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы