Мультикаст-делегаты в C# | OTUS >
1+0=2
1+0=2
Выбирайте курс из спецкаталога, а за покупку — дарим второй курс в записи. Поторопитесь! 26 ноября такая арифметика перестанет работать
Выбирайте курс из спецкаталога, а за покупку — дарим второй курс в записи. Поторопитесь! 26 ноября такая арифметика перестанет работать
Выбрать курс

Мультикаст-делегаты в C#

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

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

Рассмотрим пример применения мультикаст-делегата при выводе приветствия:

Screenshot_1-1801-41efd8.png Screenshot_2-1801-0ef478.png

В следующем примере код позволяет умножать полученное число на 2 и возводить это же число в квадрат:

Screenshot_3-1801-375517.png

Также будет нелишним рассмотреть типы делегатов.

Типы делегатов

System.Delegate

Тут смысл тот же, что и у указателей на методы в языке программирования C++. Правда, в C# делегаты не задействуют указатели, а сохраняют метаданные, которые определяют целевой метод для последующего вызова.

Кроме этого, System.Delegate содержит экземпляр класса System.Reflection.MethodInfo — это метаданные .NET, необходимые для вызова метода через отражения.

Очередной важный аспект System.Delegate — экземпляр объекта, для которого осуществляется вызов метода. Если существует неограниченное количество объектов с нужной сигнатурой, нам надо определить, какому конкретно объекту его назначить.

Исключением является применение статичного метода, который определен MetodInfo, — в данном случае ссылка на объект вернёт null.

System.MulticastDelegate

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

Цепочка делегатов

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

На этом всё: мы рассмотрели принципы работы мультикаст-делегатов на C#, а также примеры их реализации.

Источник

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто
Два курса по цене одного
Два курса по цене одного
−5% на программу со стартом в ноябре и ещё один курс в записи в подарок. Мы такие добрые с 12 по 26 ноября
−5% на программу со стартом в ноябре и ещё один курс в записи в подарок. Мы такие добрые с 12 по 26 ноября