Иллюстрированный самоучитель по Architecture .NET

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

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.