Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VSRPP.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
182 Кб
Скачать
☆

16. Делегаты в языке с#

Делегат - это тип, который представляет собой ссылки на методы с определенным списком параметров и возвращаемым типом. При создании экземпляра делегата этот экземпляр можно связать с любым методом с совместимой сигнатурой и возвращаемым типом. Метод можно вызвать (активировать) с помощью экземпляра делегата.

Делегаты используются для передачи методов в качестве аргументов к другим методам. Обработчики событий — это нe что иное, как методы, вызываемые с помощью делегатов. Вы создаёте свой метод, а класс, такой как элемент управления Windows, может вызывать ваш метод при возникновении определенного события. В следующем примере показано объявление делегата:

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

Делегаты имеют следующие свойства.

  • Делегаты похожи на указатели функций в C++, но являются типобезопасными.

  • Делегаты позволяют производить передачу методов подобно обычным параметрам.

  • Делегаты можно использовать для определения методов обратного вызова.

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

  • Точное соответствие методов типу делегата не требуется. 

17. Анонимные методы и лямбда-выражения в языке c#

Анонимные методы.

      Анонимные методы появились еще в версии C# 2.0. Применяют их и сегодня. Хоть и на смену анонимным методам в версии С# 3.0 пришли лямбда выражения, все же со счетов их списывать не стоит. Само название говорит, что метод анонимный, то есть не имеет названия! Лямбда выражения будет легче понять после рассмотрения анонимных методов. Анонимный метод – один из способов создать безымянный блок, который будет связан с конкретным делегатом.

Лямбда выражения.

     Лямбда выражения, это более лучшая замена анонимным методам, которая основываются на новом синтаксисе. Во всех лямбда выражениях должен быть лямбда оператор “=>”. Этот оператор разделяет выражение на две части.

  • В левой части – параметры (может быть несколько);

  • В правой части – тело метода;

     Есть еще такие понятия, как одиночные и блочные лямбда выражения. Все просто, если у нас после цикла for или оператора if включается одна строчка кода, то незачем включать эту строку в фигурные скобки. Это относится к одиночным лямбда выражениям, но если в выражение несколько строчек, нужно захватить этот блок в фигурные скобки.

     Я бы распределил использование лямбда выражения на три этапа:

  1. Определения делегата, совместимого с лямбда-выражением.

  2. Создание экземпляра делегата, которому присваивается лямбда-выражение.

  3. Этот этап, уже само использование выражение, которое происходит при обращение к делегату.

Блочные лямбда-выражения:

     Чтоб создать блочное лямбда-выражение, нужно просто его взять в фигурные скобки. Преимущества в использование блочных выражений проявляется в том, что есть возможность управлять такими операторами как if, for и т.д.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]