Ћекции.ќрг


ѕоиск:




 атегории:

јстрономи€
Ѕиологи€
√еографи€
ƒругие €зыки
»нтернет
»нформатика
»стори€
 ультура
Ћитература
Ћогика
ћатематика
ћедицина
ћеханика
ќхрана труда
ѕедагогика
ѕолитика
ѕраво
ѕсихологи€
–елиги€
–иторика
—оциологи€
—порт
—троительство
“ехнологи€
“ранспорт
‘изика
‘илософи€
‘инансы
’ими€
Ёкологи€
Ёкономика
Ёлектроника

 

 

 

 


ќй параметр Ц экземпл€р класса Monster.SortBy»м€ Ц это полное им€ класса!!!




Array.Sort(mas, new Monster.SortBy»м€());

foreach (Monster x in mas)

x.Passport();

Console.WriteLine("—ортировка по умени€м");

Array.Sort(mas, new Monster.SortBy”мение());

foreach (Monster x in mas)

x.Passport();

Console.ReadLine(); } }}

 лонирование объектов (интерфейс ICloneable)

 лонирование -создание копии объекта.  опи€ объекта называетс€ клоном. ѕри присваивании одного экземпл€ра другому копируетс€ ссылка, а не сам объект. ≈сли необходимо скопировать в другую область пам€ти пол€ объекта, можно воспользоватьс€ методом MemberwiseClone(), который любой объект наследует от класса object. ѕри этом объекты, на которые указывают пол€ объекта, в свою очередь €вл€ющиес€ ссылками, не копируютс€. Ёто называетс€ поверхностным клонированием. ƒл€ создани€ полностью независимых объектов необходимо глубокое копирование, когда в пам€ти создаетс€ дубликат всего дерева объектов, то есть объектов, на которые ссылаютс€ пол€ объекта, пол€ полей, и т.д. јлгоритм глубокого копировани€ сложен, требует рекурсивного обхода всех ссылок объекта и отслеживани€ циклических зависимостей.

ќбъект, имеющий собственные алгоритмы клонировани€, должен объ€вл€тьс€ как производный интерфейса ICloneable и переопредел€ть его единственный метод Clone().

ћодернизируем предыдущий пример и создадим поверхностную копию экземпл€ра класса Monster с помощью метода MemberwiseClone() и реализации интерфейса ICloneable. ћетод MemberwiseClone() можно вызывать только из методов класса, так как он объ€влен в классе object как protected.

using System;

using System.Collections;

using System.Linq;

using System.Text;

namespace ConsoleApplication1

{

class Monster:ICloneable

{

public Monster(int сила, int умение, string им€)

{

this.сила = сила;

this.умение = умение;

this.им€ = им€;

}

public Monster ShallowClone()

{

return (Monster)this.MemberwiseClone();

}

public object Clone()

{

return new Monster(this.сила, this.умение, "Ёто-клон!" + this.им€);

}

public int ”мение

{

get { return умение; }

set

{

if (value > 0) умение = value;

else умение = 0;

}

}

public void Passport()

{

Console.WriteLine("ћонстр {0} сила = {1} умение= {2}", им€, сила, умение);

}

string им€;

int сила, умение;

}

class Program

{

static void Main(string[] args)

{ Monster ¬ас€=new Monster (100,100,"¬ас€");

Monster X = ¬ас€;

//2 способа создани€ клонов Ц метод ShallowClone() и Clone()

Monster Y = ¬ас€.ShallowClone();

Monster Z = (Monster)¬ас€.Clone();

„ем отличаетс€

¬ас€.Passport();

X.Passport();

Y.Passport();

Z.Passport();

Console.ReadLine(); } }}

 

Ёкземпл€р X ссылаетс€ на ту же область пам€ти.ю что и экземпл€р ¬ас€. —ледовательно, если внести изменени€ в один из этих объектов, это отразитс€ на другом. Ёкземпл€ры Y и Z, созданные путем клонироани€, обладают собственными копи€ми значений полей и независимы от исходного экземпл€ра.

 





ѕоделитьс€ с друзь€ми:


ƒата добавлени€: 2015-05-05; ћы поможем в написании ваших работ!; просмотров: 435 | Ќарушение авторских прав


ѕоиск на сайте:

Ћучшие изречени€:

≈сли вы думаете, что на что-то способны, вы правы; если думаете, что у вас ничего не получитс€ - вы тоже правы. © √енри ‘орд
==> читать все изречени€...

2020 - | 1988 -


© 2015-2024 lektsii.org -  онтакты - ѕоследнее добавление

√ен: 0.007 с.