Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2019
635
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.45 KB | None | 0 0
  1. 1. Создать иерархию классов Person->Student->Teacher.
  2. Каждый класс – в своей сборке.
  3. В каждом классе должны быть:
  4. - свойства
  5. - виртуальная функция Print
  6. - переопределенная функция ToString()
  7. Основная программа создает массив объектов Person или их наследников, после чего выдает его на экран.
  8. У каждого Teacher должен быть список Students, которыми он руководит, у каждого Student - Teacher, который им руководит.
  9. Замечание. В процессе реализации возникнет такая ошибка как циклическая зависимость сборок:
  10. сборка Student зависит от сборки Teacher и наоборот. Для устранения этой ошибки рекомендуется создать класс Student
  11. без поля Teacher, после чего создать производный класс StudentWithAdvisor с полем Teacher в отдельной сборке.
  12. 2. Для классов Person->Student->Teacher реализовать и оттестировать (написать автотесты) ToString(), Equals(), GetHashCode().
  13. 3. Для классов Person->Student->Teacher реализовать статические методы RandomPerson, RandomStudent, RandomTeacher,
  14. которые возвращают случайного из некоторой коллекции.
  15. 4. С помощью is, as, GetType определить, сколько в массиве персон, студентов и преподавателей и перевести всех студентов на следующий курс.
  16. 5. Для классов Person->Student->Teacher реализовать глубокое клонирование,
  17. определив виртуальный метод Clone(). Клон должен возвращать точную копию по значению и типу.
  18. Проиллюстрировать Clone на примере контейнера персон - должны создаваться клоны объекты ровно тех типов,
  19. которые содержатся в исходном контейнере.
  20. 6. Для классов Person->Student->Teacher реализовать перегрузку операторов ==, !=
  21. 7. В классе Student реализовать интерфейс IComparable<Student>. Воспользовавшись Array.Sort, отсортировать массив студентов.
  22. 8. Реализовать в классах Person->Student->Teacher интерфейс ICloneable и проиллюстрировать его использование.
  23. 9. Реализовать в классе Person интерфейс IDisposable и убедиться в корректности его работы в операторе using
  24. В методе Dispose() класса Person достаточно выдавать диагностическое сообщение о том, что метод Dispose() вызван.
  25. 10. Создать контейнер Persons, который можно было бы использовать в foreach.
  26. Для этого поместить в него поле List<Person> list и метод Add(Person p), а также реализовать интерфейс IEnumerable<Person>,
  27. используя в методе GetEnumerator конструкцию yield return.
  28.  
  29. Пример реализации:
  30.  
  31. public class CustomContainer: IEnumerable<int>
  32. {
  33. public IEnumerator<int> GetEnumerator()
  34. {
  35. for (int i = 0; i < 10; i++)
  36. yield return i;
  37. }
  38. IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
  39. }
  40. Заполнить контейнер Persons персонами и студентами, используя его метод Add.
  41. После этого воспользоваться методом foreach по данному контейнеру, выдавая всех персон и студентов в контейнере.
  42. Перед каждой персоной или студентом должен выводиться порядковый номер во внутреннем списке.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement