Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Понятие делегата






Делегат (англ. delegate) — такой класс, который позволяет хранить в себе ссылку на метод с определённой сигнатурой (порядком и типами принимаемых и типом возвращаемого значений) произвольного класса. Экземпляры делегатов содержат ссылки на конкретные методы конкретных классов.

Делегаты используются, в частности, для определения прототипа функции обратного вызова, например, в событийной модели.NET Framework.

В C# делегат определяется с помощью ключевого слова delegate, далее задается тип возвращаемого значения, после задается имя делегата и его параметры.

Пример: public delegate void VoidDelegate ();

 

43. Инициализация делегата Инициализация делегата может быть проведена следующим образом: Del del1 = new Del(Notify); Где Del - тип делегата, del1 – экземпляр делегата, Notify – подходящий по сигнатуре метод.C# версии 2.0 предоставляет упрощенный способ записи предыдущего объявления, как показано в следующем примере.Del del2 = Notify; В C# версии 2.0 и более поздней версии также можно использовать анонимный метод для объявления и инициализации делегата, как показано в следующем примере.Del del3 = delegate(string name) { Console.WriteLine(" Notification received for: {0}", name); }; В C# версии 3.0 и более поздней версии делегаты можно также объявлять и создавать их экземпляры при помощи лямбда-выражения, как показано в следующем примере.Del del4 = name => { Console.WriteLine(" Notification received for: {0}", name); }; Следует всегда проверять делегат на null, прежде чем ссылаться на него 44. Обратный вызов множественных методов Статический метод Combine добавляет метод в список, поддерживаемый делегатом. В С# этот метод вызывается за счет использования перегруженной операции +=Статические методы удаляют метод (или все методы) из списка вызовов делегата. В С# метод Remove может быть вызван неявно, посредством перегруженной операции -= 45. Групповые делегаты 46. Анонимные методы Для определения анонимного метода используется ключевое слово delegate Для анонимного метода можно указать имена параметров и типов На рисунке показано добавление анонимного метода в качестве обработчика для делегатаТип возвращаемого значения не указывается; компилятор будет работать исходя из возвращаемого типа в зависимости от контекста 47. Лямбда выражения § Лямбда-выражением является выражение, возвращающее метод § Лямбда-выражения широко используются в Visual C# особенно при определении Language-Integrated Query (LINQ) выражений§ Лямбда-выражение определяется с помощью операции «=>»
Набор параметров лямбда-выражения -> < -Тело лямбда-выражения
Тело определяет функцию, которая может вернуть значение, в этом случае Visual C# компилятор выводит возвращаемый тип из определения метода § Лямбда-выражение может принимать более одного параметра § Семантически аналогично предыдущему выражению, но в качестве тела используется не простое выражение, а Visual C# операторный
блок 48. События Событие представляет собой автоматическое уведомление о том, что произошло некоторое действие. События действуют по следующему принципу: объект, проявляющий интерес к событию, регистрирует обработчик этого события. Когда же событие происходит, вызываются все зарегистрированные обработчики этого события. Обработчики событий обычно представлены делегатами.События являются членами класса и объявляются с помощью ключевого слова event. Чаще всего для этой цели используется следующая форма: event делегат_события имя_события; События основаны на делегатах и предоставляют им механизм публикации/подписки. В каркасе.NET события присутствуют повсюду. В приложениях Windows класс Button поддерживает событие Click. Этот тип события является делегатом. Метод-обработчик, вызываемый с событием Click, должен быть определен с параметрами, заданными в типе делегата.Как и делегаты, события поддерживают групповую адресацию. Это дает возможность нескольким объектам реагировать на уведомление о событии. 49. Классы коллекций Все коллекции реализуют интерфейс IСollection• Count• CopyTo()• GetEnumerator()Некоторые коллекции реализуют интерфейс IList• Count• Add(Object)• Remove(Object)• Insert(Int32, Object) Класс ArrayList это простой класс коллекция, реализующий массив, который может динамически изменять свой размерВсе коллекции реализуют интерфейс IСollection, определяющий метод GetEnumerator, который возвращает объект Enumerator (перечислитель), используемый для быстрого перебора всех элементов в коллекции. Переюор осуществляется с помощью foreach Queue • FIFO структура данных• Обеспечивает методы Enqueue и Dequeue вместо методов Add и Remove • Растет автоматически при добавлении объектов в коллекцию, но автоматически не сжимается при удалении элементов из нее StackFILO структура данных• Обеспечивает методы Push и Pop вместо методов Add и Remove • Растет автоматически при добавлении объектов в коллекцию, но автоматически не сжимается при удалении элементов из нее 50. Понятие обобщённого типа (Generics) • Обобщенный тип это тип, специфицирующий один или несколько параметров типа• Тип параметра указывается при определении класса с помощью угловых скобок•.NET Framework определяет обобщенные версии некоторых из классов коллекций в пространстве имен System.Collections.Generic 51. Пользовательские обобщенные типы Для определения пользовательского обобщенного типа нужно добавить один или несколько параметров типа сразу после имени класса в угловых скобкахИмена, указанные для параметров типа, используются в качестве конкретных типов в классе 52. Обобщённые интерфейсы Помимо обобщенных классов и методов, в C# допускаются обобщенные интерфейсы. Такие интерфейсы указываются аналогично обобщенным классам. Применяя обобщения, можно определять интерфейсы, объявляющие методы с обобщенными параметрами.При определении обобщенного интерфейса указываются параметры типа, которые используются в членах, определенных в интерфейсе. Пример: interface IPrinter< DocumentType> where DocumentType: Iprintable 53. Инвариантность Инвариантность — ситуация, когда наследование исходных типов не переносится на производные. Таким образом инвариантность: позволяет использовать только заданный тип 54. Ковариация и контравариацияКовариация. Если методы в обобщенном интерфейсе могут возвращать строки, они также могут возвращать объекты. (Все строки являются объектами) Контравариация. Если методы в обобщенном интерфейсе могут принимать параметры object, они могут принимать параметры string. (Если можно выполнять операции с использованием объекта, значит можно выполнять ту же операцию с использованием строки, потому что все строки являются объектами.)





© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.