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

Мультикаст-делегаты в 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 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто