Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Клонирование объектов

Стандартные интерфейсы.Net

В библиотеке.Net определено множество стандартных интерфейсов задающих желаемое поведение объектов. Например интерфейс IComparable задает метод сравнения объектов, что позволяет выполнить их сортировку. Реализация интерфейсов IEnumerable и IEnumerator позволяют просматривать содержимое объекта с помощью конструкции Foreach реализация интерфейса ICloneable позволяет клонировать объект интерфейс IComarable определен в пространстве имен System, он содержит один метод ComareTo возвращающий результат сравнения двух объектов – текущего и переданного ему в качестве параметра.

Метод должен возвращать 0, если текущий объект и параметр равны, отрицательное число, если текущий объект меньше параметра положительное число, если текущий объект больше параметра.

Сортировка по разным критериям.

Интерфейс IComparable определен в пространстве имен System.Collections он содержит один метод Compare возвращающий результат сравнения двух объектов переданных ему в качестве параметров. Принцип применения интерфейса состоит в том, что для каждого критерия сортировки объектов описывается небольшой вспомогательный класс, реализующий этот интерфейс. Объект этого класса передается в стандартный метод сортировки массива в качестве второго аргумента.

Клонирование – это создание копии объекта, копия объекта называется клоном, при присваивании одного объекта, ссылочного типа к другому копируется ссылка, а не сам объект. Если необходимо скопировать в другую область памяти поля объекта, можно воспользоваться методом memberwiseClone, который любой объект наследует от класса object. при этом объекты на которые указывают поля объекта, в свою очередь являющиеся ссылками не копируются, это называется поверхностным клонированием. Для создания полностью независимых объектов необходимо глубокое клонирование, когда в памяти создается дубликат всего дерева объекта, т.е. объектов на которые ссылаются поля объекта, поля полей и т.д. Алгоритм глубокого клонирования является сложным, так как требует рекурсивного обхода всех ссылок объекта и отслеживание циклических зависимостей. Объект имеющий собственные алгоритмы клонирования должен объявляться как наследник интерфейса ICloneable и переопределять его единственный метод Clone.

Абстрактный класс.

При создании иерархии объектов, для исключения, повторяющегося кода, часто выделяют их общие свойства в один родительский класс. При этом может оказаться, что создавать экземпляры такого класса, не имеет смысла, потому что никакие реальные объекты им не соответствуют, такие классы называются абстрактными. Абстрактный класс, служит только для порождения потомков. Как правило в нем задается набор методов, которые каждый из потомков будет реализовывать по своему. Абстрактный класс задает интерфейс для всей иерархии при этом методом класса, может не соответствовать никаких конкретных действий. В этом случае методы имеют пустое тело и объявляются со спецификатором abstract. Если в классе есть хотя бы один абстрактный метод то весь класс, должен быть описан как абстрактный. Если класс производный от абстрактного не переопределяет все абстрактные методы он так же должен описываться как абстрактный.

Бесплодные классы.

Если наследовать от класса запрещается, то используется ключевое слово sealed. Большинство встроенных типов данных описано как sealed. Если необходимо использовать функциональность бесплодного класса, то применяется не наследование, а вложение (включение). Вложение классов, когда один класс включает в себя поля являющийся классами является альтернативой наследования при проектировании. Так как поля класса обычно закрыты то необходимо описать метод объемлющего класса, из которого необходимо вызвать метод включенного класса.

Класс Object.

Корневой класс, system.object всей иерархии объектов.Net называется в языке C# object. Он обеспечивает всех наследников несколькими важными методами. Производные классы могут использовать эти методы непосредственно или переопределять их. Класс object часто используется при описании типов параметра методов для придания им общности, а так же для хранения ссылок на объекты различного типа. Открытые методы класса:

Equals он возвращает True если параметр и вызывающий объект ссылаются на одну и ту же область памяти.

Equals (с двумя параметрами) возвращает True если оба параметра ссылаются на одну и ту же область памяти.

GetHashCode метод формирует хэш-код объекта и возвращает число однозначно идентифицирующее объект.

GetType возвращает текущий тип объекта на который в данный момент указывает ссылка. Возвращаемое значение имеет тип Type.

ReferenseEquals возвращает значение true если оба параметра ссылаются на одну и ту же область памяти.

ToString по умолчанию возвращает для ссылочных типов полное имя класса в виде строки, а для значимых значение величены преобразованное в строку.

<== предыдущая лекция | следующая лекция ==>
Рекурсивные методы | Структурное программирование
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 487; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.157 сек.