Копирование объектов и интерфейс icioneable
Использование ICloneable
Последний способ копирования использует тот факт, что класс Course (Курс) поддерживает интерфейс ICloneable и реализует метод Clone (Клон). Для копирования коллекции Roster (Список) используется также то, что ArrayList (Список массивов) реализует интерфейс ICloneable, как было указано в этой главе ранее. Заметим, что метод Clone (Клон) возвращает значение типа Object*, так что перед тем, как присвоить его полю pRoster, возвращаемое значение необходимо привести к типу ArrayList*.
_gc class Course: public ICloneable // класс сборщика мусора Курс: ICloneable { public: Object *Clone() { Course *pCourse = new Course(pTitle); // новый Курс pCourse › pRoster = dynamic_cast<ArrayList *>(pRoster › Clone()); return pCourse; } };
Приведем третью часть программы, в которой вызывается метод Clone (Клон). Здесь мы тоже с помощью второго указателя изменяем название и добавляем в список нового студента.
_gc class CopyDemo // класс сборщика мусора CopyDemo { public: static void Main() { Console::WriteLine( "\nCopy is done via pC2 = pCl › Clone()"); InitializeCourse (); pC2 = dynamic_cast<Course *>(pCl › Clone()); pC2 › pTitle = ".NET Programming"; // Программирование на .NET pC2 › AddStudent("Charlie"); // Чарли pC2 › Show("copy with changed title and new student"); // Показать ("копия с измененным названием //и новым студентом"); pCl › Shcw("01iginal"); // Показать ("оригинал");
Приведем выдачу третьей части программы. Теперь видно, что в результате копирования мы получили два независимых экземпляра класса Course (Курс), каждый из которых имеет свой заголовок и список студентов.
Copy is done via рС2 = pCl › Clone() – ---copy with changed title and new student-– -- Course: .NET Programming with 3 students John Mary Charlie – ---original--– Course: Intro to Managed C++ with 2 students John Mary
А вот и перевод выдачи:
Копия сделана через рС2 = рС1 › Clone О – ---копия с измененным названием и новым студентом-– -- Курс: Программирование на .NET с 3 студентами Джон Мэри Чарли – ----оригинал----- Курс: Введение в Управляемый С ++ с 2 студентами Джон Мэри
Последний подход иллюстрирует природу интерфейсов .NET. Вы можете копировать объекты, не особо задумываясь и не беспокоясь об их типах.