Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Перебор объектов (интерфейс IEnumerable) и итераторы




Перегрузка операций сложения

если класс реализует интерфейс ICompareble, его экземпляры можно сравнивать между собой по принципу больше или меньше.Операции должны перегружаться парами: < и >. Перегрузка операций обычно выполняется путем обращения к переопределенным методам CompareTo и Equals

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

Клонирование- это создание копии объекта. При присваивании одного объекта ссылочного тип другому копируется ссылка, а не сам объект. Если необходимо скопировать в другую область памяти поля объекта,можно воспользоваться методом MemberwiseClone. При этом объекты,на которые указывают поля объекта,в свою очередь являющиеся ссылками,не копируются. Это называется поверхностным клонированием. Для создания полностью независимых объектов необходимо глубокое клонирование,когда в памяти создается дубликат всего дерева объектов,то есть объектов, на которые ссылаются поля объекта, поля полей и тд.

Интерфейс IEnumerable определяет всего один метод - GetEnumerator,возвращающий объект типа IEnumerator, который можно использовать для просмотра элементов объекта.

Интерфейс IEnumerator задает три элемента:

• Свойство Current, возвращающее текущий элемент объекта;

• метод MoveNext, продвигающий перечислитель на следующий элемент объекта

• метод Reset, устанавливающий перечислитель в начало просмотра

Цикл foreach использует эти методы для перебора элементов, из которых состоит объект.

Итераторы- средства, облегчающие выполнение перебора в объекте. Представляет собой блок кода,задающий последовательность перебора элементов объекта.

Блок итератора синтаксически представляет собой обычный блок и может встречаться в теле метода, операции или части get свойства, если соответствующее возвращаемое значение имеет тип IEnumerable или IEnumerator.

В теле блока итератора могут встречаться две конструкции:

• yield return формирует значение, выдаваемое на очередной итерации;

• yield break сигнализирует о завершении итерации.

Ключевое слово yield имеет специальное значение для компилятора только в этих конструкциях.

Код блока итератора выполняется не так, как обычные блоки. Компилятор формирует служебный объектперечислитель, при вызове метода MoveNext которого выполняется код блока итератора, выдающий очередное значение с помощью ключевого слова yield. Следующий вызов метода MoveNext объекта-перечислителя возобновляет выполнение блока итератора с момента, на котором он был приостановлен в предыдущий раз.

 

 

4) Структуры. Перечисления.

Структура-тип данных, аналогичный классу, но имеющий ряд важных отличий от него:

• Структура является значимым, а не ссылочным типом данных, то есть экземпляр структуры хранит значения своих элементов, а не ссылки на них, и располагается в сетке, а не в хипе

• Структура не может участвовать в иерархиях наследования, она может только реализовывать интерфейсы;

• В структуре запрещено определять конструктор по умолчанию, поскольку с определен неявно и присваивает всем ее элементам значения по умолчанию (нули соответствующего типа);

• в структуре запрещено определять деструкторы, поскольку это бессмысленно.

Синтаксис структуры:

[ атрибуты ] [ спецификаторы ] struct имя структуры [: интерфейсы ]

тело_структуры [; ]

Спецификаторы структуры имеют такой же смысл, как и для класса, причем у спецификаторов доступа допускаются только public, internal и private (последний — только для вложенных структур).

Интерфейсы, реализуемые структурой, перечисляются через запятую. Тело структуры может состоять из констант, полей, методов, свойств, событий, индексаторов, операций, конструкторов и вложенных типов. Правила их описания:

• поскольку структуры не могут участвовать в иерархиях, для их элементов не могут использоваться спецификаторы protected и protected internal;

• структуры не могут быть абстрактными (abstract), к тому же по умолчанию они бесплодны (sealed);

• методы структур не могут быть абстрактными и виртуальными;

• переопределяться (то есть описываться со спецификатором override) могут только методы, унаследованные от базового класса object;

• параметр this интерпретируется как значение, поэтому его можно использовать для ссылок, но не для присваивания;

• при описании структуры нельзя задавать значения полей по умолчанию

При выводе экземпляра структуры на консоль выполняется упаковка, то есть неявное преобразование в ссылочный тип. Упаковка применяется и в других случаях, когда структурный тип используется там, где ожидается ссылочный, например, при преобразовании экземпляра структуры к типу реализуемого ею интерфейса. При обратном преобразовании — из ссылочного типа в структурный — выполняется распаковка.

При написании программ часто возникает потребность определить несколько связанных между собой именованных констант, при этом их конкретные значения могут быть не важны. Для этого удобно воспользоваться перечисляемым типом данных, все возможные значения которого задаются списком целочисленных констант.Для каждой константы задается ее символическое имя. По умолчанию константам присваиваются последовательные значения типа int, начиная с 0, но можно задать и собственные значения

Имена перечисляемых констант внутри каждого перечисления должны быть уникальными, а значения могут совпадать.

Синтаксис перечисления:

[ атрибуты ] [ спецификаторы ] enum имя_перечисления [: базовыйтип ]

тело_перечисления [; ]

Допускаются только спецификаторы перечисления new, public, protected, internal и private.

Базовый тип — это тип элементов, из которых построено перечисление. По умолчанию используется тип int, но можно задать тип и явным образом, выбрав его среди целочисленных типов, а именно: byte, sbyte, short, ushort, int, uint, long и ulong.

Тело перечисления состоит из имен констант, каждой из которых может быть присвоено значение. Если значение не указано, оно вычисляется прибавлением единицы к значению предыдущей константы. Константы по умолчанию имеют спецификатор доступа public.

Перечисления часто используются как вложенные типы, идентифицируя значения из какого-либо ограниченного набора.




Поделиться с друзьями:


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


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



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




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