Копирование объектов и интерфейс 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. Вы можете копировать объекты, не особо задумываясь и не беспокоясь об их типах.
