Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
120 of 1492 menu
◀ ▶

Метод MemberwiseClone

Защищённый метод MemberwiseClone класса Object создаёт поверхностную копию: копируются значения полей, а ссылочные поля указывают на те же объекты. Вызывают его из метода своего класса, наследующего Object.

Синтаксис

(object)MemberwiseClone()

Пример

Давайте скопируем объект с целочисленным полем:

using System; class Item { public int Num; public Item CloneCopy() { return (Item)MemberwiseClone(); } } class Program { static void Main() { var a = new Item { Num = 5 }; var b = a.CloneCopy(); b.Num = 10; Console.WriteLine(a.Num); } }

Результат выполнения кода:

5

Пример

Давайте проверим, что копия - другой экземпляр:

using System; class Item { public int Num; public Item CloneCopy() { return (Item)MemberwiseClone(); } } class Program { static void Main() { var a = new Item { Num = 5 }; var b = a.CloneCopy(); Console.WriteLine(ReferenceEquals(a, b)); } }

Результат выполнения кода:

False

Пример

Давайте скопируем поле bool вместе с int:

using System; class Flags { public int Num; public bool On; public Flags CloneCopy() { return (Flags)MemberwiseClone(); } } class Program { static void Main() { var a = new Flags { Num = 5, On = true }; var b = a.CloneCopy(); Console.WriteLine(b.On); } }

Результат выполнения кода:

True

Пример

Давайте покажем, что ссылочное поле общее при мелком клоне:

using System; class Holder { public string Text; public Holder CloneCopy() { return (Holder)MemberwiseClone(); } } class Program { static void Main() { var a = new Holder { Text = "abcde" }; var b = a.CloneCopy(); Console.WriteLine(ReferenceEquals(a.Text, b.Text)); } }

Результат выполнения кода:

True

Смотрите также

  • метод ReferenceEquals,
    который проверяет совпадение ссылок
  • метод Equals,
    который сравнивает содержимое
  • класс Object,
    который объявляет MemberwiseClone
  • тип object,
    к которому приводят результат клона
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить