Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


Для правообладателей

Обратная связь

Email: Нажмите что бы посмотреть 

Яндекс.Метрика

Презентация на тему Делегаты (C#, Лекция 5)

Содержание

Делегаты. Что это такое?Делегат - это тип, который представляет собой ссылки на методы с определенным списком параметров и возвращаемым типом.
Лекция 5 Делегаты. Что это такое?Делегат - это тип, который представляет собой ссылки на Делегаты. Что это такое?При создании экземпляра делегата этот экземпляр можно связать с Делегаты. Что это такое?Поскольку созданный экземпляр делегата является объектом, его можно передавать Делегаты. Что это такое?Эта процедура называется асинхронным обратным вызовом и обычно используется Как его создать? delegate ();Примеры:public delegate int PerformCalc (int x, int y);public delegate void Del(string message); ПримерВозьмем делегат:public delegate void Del(string message);Создадим метод, где его будем использоватьpublic void ПримерДелегат может создаваться вне класса, как новый тип ПримерТеперь создадим функцию, которая будет соответствовать нашему делегатуpublic static void PrintMes(string mes) ПримерМы передали функцию PrintMes как параметр в функцию Пример. Вариант 2А можно и так. Создали переменную от типа нашего делегата 2 в 1При вызове делегат может вызывать сразу несколько методов. Это называется 2 в 12 метода, вызываемые через 1 делегат.Методов на делегат можно прикрутить сколько угодно Пример. Вариант 3Делегат можно создать через конструктор Удаление методаЧтобы удалить метод из списка вызова, используйте оператор decrement или назначения decrement ( Удаление методаИ «отписать метод» Анонимные методыЧто означает «анонимный метод»?Создание анонимных методов является, по существу, способом передачи ПримерПример создания анонимного метода.Сам метод:delegate(int k) {Console.WriteLine( Использование методаПример получения такого анонимного метода и вызов его Зачем они нужныИспользование анонимных методов позволяет сократить издержки на кодирование при создании Немного историиИменованные методы были единственным способом объявления делегата в версиях C#, предшествующих Лямбда-выраженияЛямбда-выражение — это анонимная функция, с помощью которой можно создавать типы делегатов Лямбда-выраженияЧтобы создать лямбда-выражение, необходимо указать входные параметры (если они есть) с левой ПримерНапример, лямбда-выражение x => x * x задает параметр с именем x Еще примерВозьмем наш делегат и сделаем от него лямбда-выражение ШаблонЛямбда-выражение с выражением с правой стороны оператора => называется выражением-лямбдой.Выражения-лямбды возвращают результат Скобки в выраженииЕсли лямбда имеет только один входной параметр, скобки можно не Явное указание типовИногда компилятору бывает трудно или даже невозможно вывести типы входных Пустые параметрыОтсутствие входных параметров задаётся пустыми скобками.() => SomeMethod() Тело выражения-лямбды может состоять из вызова метода. ВыражениеЛямбда операторов (или операторная лямбда) напоминает выражение-лямбду, за исключением того, что оператор (или ПримерИзменим наш пример, добавим еще операцию в наше выражение ОсобенностиТело лямбды оператора может состоять из любого количества операторов;Однако на практике обычно используется не более двух-трех. Событийное программированиеСитуация: вы получили права и хотите, чтобы все об этом знали. Событийное программированиеЧто делают сейчас? Как это можно описать1 Вариант: вам нужно иметь записную книжку с номерами Как это можно описать2 Вариант: вы просто «постите» новость в социальной сети Переведем на «программистский» языкРанее: мы должны были иметь объекты всех классов, кто Переведем на «программистский» языкТеперь: мы создаем поле-«событие» в нашем классе и метод, Переведем на «программистский» язык«Изменением в классе» может быть любой вызываемый метод класса Как создаватьЧтобы создать событие нам понадобится делегатpublic delegate void Del(string message);Теперь в Что такое событиеСобытия это особый тип многоадресных делегатов, которые можно вызвать только Что такое событиеСобытия позволяют классу или объекту уведомлять другие классы или объекты Что такое событиеВ C# в стандартном приложении Windows Forms или веб-приложении вы Как создаватьСоздать метод, с помощью которого на это событие можно будет подписаться.public Как создаватьИ метод, в котором событие будет вызываться. public void SomeMethod() ПримерКак это может выглядеть наглядно Как создаватьВсе, что остается, это привязать метод одного класса к событию в Как создаватьТеперь связываем наши классы События в C#В C# в стандартном приложении Windows Forms или веб-приложении вы Пример из лабораторнойЕсли посмотреть файл Form1 .Designer.cs Пример из лабораторнойМы можем прямо в коде добавлять или удалять методы обработки от событий элементов формы.
Слайды презентации

Слайд 2 Делегаты. Что это такое?
Делегат - это тип, который

Делегаты. Что это такое?Делегат - это тип, который представляет собой ссылки

представляет собой ссылки на методы с определенным списком параметров

и возвращаемым типом.

Слайд 3 Делегаты. Что это такое?
При создании экземпляра делегата этот

Делегаты. Что это такое?При создании экземпляра делегата этот экземпляр можно связать

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

и возвращаемым типом.

Метод можно вызвать (активировать) с помощью экземпляра делегата.

Слайд 4 Делегаты. Что это такое?
Поскольку созданный экземпляр делегата является

Делегаты. Что это такое?Поскольку созданный экземпляр делегата является объектом, его можно

объектом, его можно передавать как параметр или назначать свойству.



Это позволяет методу принимать делегат в качестве параметра и вызывать делегат в дальнейшем.

Слайд 5 Делегаты. Что это такое?
Эта процедура называется асинхронным обратным

Делегаты. Что это такое?Эта процедура называется асинхронным обратным вызовом и обычно

вызовом и обычно используется для уведомления вызывающего объекта о

завершении длительной операции.

Слайд 6 Как его создать?
delegate

Как его создать? delegate ();Примеры:public delegate int PerformCalc (int x, int y);public delegate void Del(string message);

делегата>();

Примеры:
public delegate int PerformCalc (int x, int y);

public delegate

void Del(string message);

Слайд 7 Пример
Возьмем делегат:
public delegate void Del(string message);

Создадим метод, где

ПримерВозьмем делегат:public delegate void Del(string message);Создадим метод, где его будем использоватьpublic

его будем использовать
public void Method (int param1, Del callback)


{
callback("The number is: " +
param1.ToString());
}

Слайд 8 Пример
Делегат может создаваться вне класса, как новый тип

ПримерДелегат может создаваться вне класса, как новый тип

Слайд 9 Пример
Теперь создадим функцию, которая будет соответствовать нашему делегату
public

ПримерТеперь создадим функцию, которая будет соответствовать нашему делегатуpublic static void PrintMes(string

static void PrintMes(string mes)
{

Console.WriteLine(mes);
}

Создадим объект от класса и вызовем тот метод

Слайд 10 Пример
Мы передали функцию PrintMes как параметр в функцию

ПримерМы передали функцию PrintMes как параметр в функцию

Слайд 11 Пример. Вариант 2
А можно и так. Создали переменную

Пример. Вариант 2А можно и так. Создали переменную от типа нашего делегата

от типа нашего делегата


Слайд 12 2 в 1
При вызове делегат может вызывать сразу

2 в 1При вызове делегат может вызывать сразу несколько методов. Это

несколько методов.
Это называется многоадресностью.
Чтобы добавить в список методов

делегата (список вызова) дополнительный метод, необходимо просто добавить два делегата с помощью оператора сложения или назначения сложения ("+" или "+=").

Слайд 13 2 в 1
2 метода, вызываемые через 1 делегат.


Методов

2 в 12 метода, вызываемые через 1 делегат.Методов на делегат можно прикрутить сколько угодно

на делегат можно прикрутить сколько угодно


Слайд 14 Пример. Вариант 3
Делегат можно создать через конструктор

Пример. Вариант 3Делегат можно создать через конструктор

Слайд 15 Удаление метода
Чтобы удалить метод из списка вызова, используйте

Удаление методаЧтобы удалить метод из списка вызова, используйте оператор decrement или назначения decrement (

оператор decrement или назначения decrement ("-" или «-=»).


Слайд 16 Удаление метода
И «отписать метод»

Удаление методаИ «отписать метод»

Слайд 17 Анонимные методы
Что означает «анонимный метод»?

Создание анонимных методов является,

Анонимные методыЧто означает «анонимный метод»?Создание анонимных методов является, по существу, способом

по существу, способом передачи блока кода в качестве параметра

делегата.

Слайд 18 Пример
Пример создания анонимного метода.
Сам метод:
delegate(int k) {Console.WriteLine("Число: "

ПримерПример создания анонимного метода.Сам метод:delegate(int k) {Console.WriteLine(

+
k); };


Слайд 19 Использование метода
Пример получения такого анонимного метода и вызов

Использование методаПример получения такого анонимного метода и вызов его

его


Слайд 20 Зачем они нужны
Использование анонимных методов позволяет сократить издержки

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

на кодирование при создании делегатов, поскольку не требуется создавать

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

Слайд 21 Немного истории
Именованные методы были единственным способом объявления делегата

Немного историиИменованные методы были единственным способом объявления делегата в версиях C#,

в версиях C#, предшествующих версии 2.0.
Анонимные методы

появились в C# 2.0 (Visual Studio 2005)
А в версии C# 3.0 (Visual Studio 2008) их заменили лямбда-выражения.

Слайд 22 Лямбда-выражения
Лямбда-выражение — это анонимная функция, с помощью которой

Лямбда-выраженияЛямбда-выражение — это анонимная функция, с помощью которой можно создавать типы

можно создавать типы делегатов или деревьев выражений.

Лямбда-выражения особенно полезны

при написании выражений запросов LINQ.

Слайд 23 Лямбда-выражения
Чтобы создать лямбда-выражение, необходимо указать входные параметры (если

Лямбда-выраженияЧтобы создать лямбда-выражение, необходимо указать входные параметры (если они есть) с

они есть) с левой стороны лямбда-оператора =>, и поместить

блок выражений или операторов с другой стороны.

Слайд 24 Пример
Например, лямбда-выражение x => x * x задает

ПримерНапример, лямбда-выражение x => x * x задает параметр с именем

параметр с именем x и возвращает квадрат значения x.
delegate

int del(int i);
static void Main(string[] args)
{
del myDelegate = x => x * x;
int j = myDelegate(5); //j = 25
}

Слайд 25 Еще пример
Возьмем наш делегат и сделаем от него

Еще примерВозьмем наш делегат и сделаем от него лямбда-выражение

лямбда-выражение


Слайд 26 Шаблон
Лямбда-выражение с выражением с правой стороны оператора =>

ШаблонЛямбда-выражение с выражением с правой стороны оператора => называется выражением-лямбдой.Выражения-лямбды возвращают

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

форму.

(input parameters) => expression

Слайд 27 Скобки в выражении
Если лямбда имеет только один входной

Скобки в выраженииЕсли лямбда имеет только один входной параметр, скобки можно

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

они обязательны. Два и более входных параметра разделяются запятыми и заключаются в скобки:

(x, y) => x == y

Слайд 28 Явное указание типов
Иногда компилятору бывает трудно или даже

Явное указание типовИногда компилятору бывает трудно или даже невозможно вывести типы

невозможно вывести типы входных параметров. В этом случае типы

можно указать в явном виде, как показано в следующем примере.

(int x, string s) => s.Length > x

Слайд 29 Пустые параметры
Отсутствие входных параметров задаётся пустыми скобками.

() =>

Пустые параметрыОтсутствие входных параметров задаётся пустыми скобками.() => SomeMethod() Тело выражения-лямбды может состоять из вызова метода.

SomeMethod()

Тело выражения-лямбды может состоять из вызова метода.


Слайд 30 Выражение
Лямбда операторов (или операторная лямбда) напоминает выражение-лямбду, за исключением

ВыражениеЛямбда операторов (или операторная лямбда) напоминает выражение-лямбду, за исключением того, что оператор

того, что оператор (или операторы) заключается в фигурные скобки:

(input

parameters) => {statement;}


Слайд 31 Пример
Изменим наш пример, добавим еще операцию в наше

ПримерИзменим наш пример, добавим еще операцию в наше выражение

выражение


Слайд 32 Особенности
Тело лямбды оператора может состоять из любого количества

ОсобенностиТело лямбды оператора может состоять из любого количества операторов;Однако на практике обычно используется не более двух-трех.

операторов;

Однако на практике обычно используется не более двух-трех.


Слайд 33 Событийное программирование
Ситуация: вы получили права и хотите, чтобы

Событийное программированиеСитуация: вы получили права и хотите, чтобы все об этом

все об этом знали. Что бы делали лет 5-10

тому назад?

Слайд 34 Событийное программирование
Что делают сейчас?

Событийное программированиеЧто делают сейчас?

Слайд 35 Как это можно описать
1 Вариант: вам нужно иметь

Как это можно описать1 Вариант: вам нужно иметь записную книжку с

записную книжку с номерами всех тех, кого вы хотите

оповестить о каком-то событии. И каждому нужно еще позвонить и сказать об этом.

Слайд 36 Как это можно описать
2 Вариант: вы просто «постите»

Как это можно описать2 Вариант: вы просто «постите» новость в социальной

новость в социальной сети и все, кто на вас

«подписан» видят вашу новость.

Слайд 37 Переведем на «программистский» язык
Ранее: мы должны были иметь

Переведем на «программистский» языкРанее: мы должны были иметь объекты всех классов,

объекты всех классов, кто должен знать об изменениях внутри

класса и вызывать методы этих объектов.

А представьте, что появилось еще 2 класса, кто должны знать об оповещениях. Сколько кода прописать придется?

Слайд 38 Переведем на «программистский» язык
Теперь: мы создаем поле-«событие» в

Переведем на «программистский» языкТеперь: мы создаем поле-«событие» в нашем классе и

нашем классе и метод, с помощью которого любой класс

может «подписаться» на это событие. Далее, если в классе происходят изменения, просто вызывается это событие и все классы, кто на него подписаны реагируют на это.

Слайд 39 Переведем на «программистский» язык
«Изменением в классе» может быть

Переведем на «программистский» язык«Изменением в классе» может быть любой вызываемый метод

любой вызываемый метод класса или событие.
«Реакция другого класса» это

метод того класса, который будет вызываться при совершении события.
«Подписать на событие» это передать в поле-событие класса метод другого класса, который будет вызываться при наступлении события.

Слайд 40 Как создавать
Чтобы создать событие нам понадобится делегат
public delegate

Как создаватьЧтобы создать событие нам понадобится делегатpublic delegate void Del(string message);Теперь

void Del(string message);

Теперь в классе можем создать поле типа

событие, используя ключевое слово event
private event Del event1;


Слайд 41 Что такое событие
События это особый тип многоадресных делегатов,

Что такое событиеСобытия это особый тип многоадресных делегатов, которые можно вызвать

которые можно вызвать только из класса или структуры, в

которой они объявлены (класс издателя).
Если на событие подписаны другие классы или структуры, их методы обработчиков событий будут вызваны когда класс издателя инициирует событие.

Слайд 42 Что такое событие
События позволяют классу или объекту уведомлять

Что такое событиеСобытия позволяют классу или объекту уведомлять другие классы или

другие классы или объекты о возникновении каких-либо ситуаций.
Класс,

отправляющий (или порождающий) событие, называется издателем, а классы, принимающие (или обрабатывающие) событие, называются подписчиками.

Слайд 43 Что такое событие
В C# в стандартном приложении Windows

Что такое событиеВ C# в стандартном приложении Windows Forms или веб-приложении

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

управления, такими как кнопки и поля со списками.

Слайд 44 Как создавать
Создать метод, с помощью которого на это

Как создаватьСоздать метод, с помощью которого на это событие можно будет

событие можно будет подписаться.

public void AddToEvent(Del method)

{
if(event1 == null)
event1 = new Del(method);
else
event1 += method; }

Слайд 45 Как создавать
И метод, в котором событие будет вызываться.

Как создаватьИ метод, в котором событие будет вызываться. public void SomeMethod()

public void SomeMethod() {

//что-то происходит
if(event1 != null)
{
event1("Что-то произошло");
}
}

Слайд 46 Пример
Как это может выглядеть наглядно

ПримерКак это может выглядеть наглядно

Слайд 47 Как создавать
Все, что остается, это привязать метод одного

Как создаватьВсе, что остается, это привязать метод одного класса к событию

класса к событию в этом классе через объекты классов.
Создадим

другой класс.

Слайд 48 Как создавать
Теперь связываем наши классы

Как создаватьТеперь связываем наши классы

Слайд 49 События в C#
В C# в стандартном приложении Windows

События в C#В C# в стандартном приложении Windows Forms или веб-приложении

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

управления, такими как кнопки и поля со списками и т.п. 

Слайд 50 Пример из лабораторной
Если посмотреть файл Form1 .Designer.cs

Пример из лабораторнойЕсли посмотреть файл Form1 .Designer.cs

  • Имя файла: delegaty-c-lektsiya-5.pptx
  • Количество просмотров: 170
  • Количество скачиваний: 3