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

Копирование объектов и интерфейс icioneable

Почленное копирование

Теперь проиллюстрируем почленное копирование, выполненное с помощью метода MemberwiseClone класса Object (Объект). Так как этот метод защищен (имеет спецификатор доступа protected), он может быть вызван непосредственно только из экземпляра класса Course (Курс). Поэтому в классе Course (Курс) мы определили метод ShallowCopy, реализованный через метод MemberwiseClone.

_gc class Course: public ICloneable
// класс сборщика мусора Курс: ICloneable
{
Course *ShallowCopy()
{
return dynamic_cast<Course *>(MemberwiseClone());
}
};

Приведем вторую часть тестовой программы, в которой происходит вызов метода ShallowCopy. Так же, как и раньше, изменим с помощью второго указателя заголовок и добавим в список нового студента.

_gc class CopyDemo
// класс сборщика мусора CopyDemo
{
public:
static void Main() {
Console::WriteLine(
"\nCopy is done via pC2 = pCl › ShallowCopy()");
InitializeCourse();
pC2 = pCl › ShallowCopy();
pC2 › pTitle = ".NET Programming"; // Программирование на .NET
pC2 › AddStudent("Charlie"); // Чарли
pC2 › Show("copy with changed title and new student");
// Показать ("копия с измененным названием
// и новым студентом");
pCl › Show("original");
// Показать ("оригинал");

Ниже приведен результат работы второй части программы. Видно, что поле Title (Название), существует после копирования в двух независимых экземплярах, но коллекция Roster (Список), представляющая собой список студентов, была скопирована через указатель. Поэтому она одна для обеих копий, и изменения, внесенные с использованием одного указателя, видны через другой.

Copy is done via pC2 = pCl › ShallowCopy()
– -copy with changed title and new student– -–
Course: .NET Programming with 3 students
John
Mary
Charlie
– ---original-----
Course: Intro to Managed C++ with 3 students
John
Mary
Charlie

А вот и перевод выдачи:

Копия сделана через рС2 = рС1 › ShallowCopy ()
– ---копия с измененным названием и новым студентом-----
– Курс: Программирование на.МЕТ с 3 студентами Джон
Мэри
Чарли
– --оригинал-----
Курс: Введение в Управляемый С ++ с 3 студентами
Джон
Мэри
Чарли
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.