объект О, причем любые изменения в объекте О будут оказывать влияние как на копию, так и на оригинал. Как правило, метод Clone () реализуется для получения полной копии. А неполные копии могут быть созданы с помощью метода MemberwiseClone (), определенного в классе Obj ect.

Ниже приведен пример программы, в которой демонстрируется применение интерфейса ICloneable. В ней создается класс Test, содержащий ссылку на объект класса X. В самом классе Test используется метод Clone () для создания полной копии.

// Продемонстрировать применение интерфейса ICloneable.

using System;

class X {

public int a;

public X(int x) { a = x; }

}

class Test : ICloneable {

public X о; public int b;

public Test (int x, int y) { о = new X(x); b = y;

}

public void Show(string name) {

Console.Write('Значения объекта ' + name + ': ');

Console.WriteLine('o.a: {0}, b: {1}', o.a, b);

}

// Создать полную копию вызывающего объекта, public object Clone() {

Test temp = new Test(o.a, b); return temp;

}

}

class CloneDemo {

static void Main() {

Test obi = new Test(10, 20);

obi.Show('obi');

Console.WriteLine('Сделать объект ob2 копией объекта obi.');

Test ob2 = (Test) obi.Clone ();

ob2.Show('ob2');

Console.WriteLine('Изменить значение obi.о.а на 99, ' +

' а значение obl.b — на 88.');

obi.о.a = 99; obl.b = 88;

obi.Show('obi'); ob2.Show('ob2');

}

}

, Ниже приведен результат выполнения этой программы.

Значения объекта оЫ: о.а: 10, Ь: 20 Сделать объект оЬ2 копией объекта оЫ.

Значения объекта оЬ2: о.а: 10, Ь: 20

Изменить значение obi.о.а на 99, а значение obl.b — на 88.

Значения объекта оЫ: о.а: 99, Ь: 88 Значения объекта оЬ2: о.а: 10, Ь: 20

Как следует из результата выполнения приведенной выше программы, объект оЬ2 является копией объекта оЫ, но это совершенно разные объекты. Изменения в одном из них не оказывают никакого влияния на другой. Это достигается конструированием нового объекта типа Test, который выделяет новый объект типа X для копирования. При этом новому экземпляру объекта типа X присваивается такое же значение, как и у объекта типа X в оригинале.

Для получения неполной копии достаточно вызвать метод MemberwiseClone (), определяемый в классе Object из метода Clone (). В качестве упражнения попробуйте заменить метод Clone () в предыдущем примере программы на следующий его вариант.

// Сделать неполную копию вызывающего объекта, public object Clone ()    {

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату