0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Теги: мультикаст делегаты</p>
1
<p>Теги: мультикаст делегаты</p>
2
<p>Делегаты, которые включают в себя больше одного метода, называют<strong>мультикаст-делегатами</strong>. В процессе вызова они выполняют каждый метод в заданном порядке и позволяют тем самым связывать в цепочку несколько методов.</p>
2
<p>Делегаты, которые включают в себя больше одного метода, называют<strong>мультикаст-делегатами</strong>. В процессе вызова они выполняют каждый метод в заданном порядке и позволяют тем самым связывать в цепочку несколько методов.</p>
3
<p>Для работы таких делегатов они не должны возвращать какой-нибудь результат. Иначе произойдет обработка результата последнего метода цепочки.</p>
3
<p>Для работы таких делегатов они не должны возвращать какой-нибудь результат. Иначе произойдет обработка результата последнего метода цепочки.</p>
4
<p>Рассмотрим пример применения мультикаст-делегата при выводе приветствия:</p>
4
<p>Рассмотрим пример применения мультикаст-делегата при выводе приветствия:</p>
5
<p>В следующем примере код позволяет умножать полученное число на 2 и возводить это же число в квадрат:</p>
5
<p>В следующем примере код позволяет умножать полученное число на 2 и возводить это же число в квадрат:</p>
6
<p>Также будет нелишним рассмотреть типы делегатов.</p>
6
<p>Также будет нелишним рассмотреть типы делегатов.</p>
7
<h2>Типы делегатов</h2>
7
<h2>Типы делегатов</h2>
8
<h4>System.Delegate</h4>
8
<h4>System.Delegate</h4>
9
<p>Тут смысл тот же, что и у указателей на методы в языке программирования C++. Правда, в C# делегаты не задействуют указатели, а сохраняют метаданные, которые определяют целевой метод для последующего вызова.</p>
9
<p>Тут смысл тот же, что и у указателей на методы в языке программирования C++. Правда, в C# делегаты не задействуют указатели, а сохраняют метаданные, которые определяют целевой метод для последующего вызова.</p>
10
<p>Кроме этого,<strong>System.Delegate</strong>содержит экземпляр класса<strong>System.Reflection.MethodInfo</strong>- это метаданные<strong>.NET</strong>, необходимые для вызова метода через отражения.</p>
10
<p>Кроме этого,<strong>System.Delegate</strong>содержит экземпляр класса<strong>System.Reflection.MethodInfo</strong>- это метаданные<strong>.NET</strong>, необходимые для вызова метода через отражения.</p>
11
<p>Очередной важный аспект<strong>System.Delegate</strong>- экземпляр объекта, для которого осуществляется вызов метода. Если существует неограниченное количество объектов с нужной сигнатурой, нам надо определить, какому конкретно объекту его назначить.</p>
11
<p>Очередной важный аспект<strong>System.Delegate</strong>- экземпляр объекта, для которого осуществляется вызов метода. Если существует неограниченное количество объектов с нужной сигнатурой, нам надо определить, какому конкретно объекту его назначить.</p>
12
<p>Исключением является применение статичного метода, который определен MetodInfo, - в данном случае ссылка на объект вернёт null.</p>
12
<p>Исключением является применение статичного метода, который определен MetodInfo, - в данном случае ссылка на объект вернёт null.</p>
13
<h4>System.MulticastDelegate</h4>
13
<h4>System.MulticastDelegate</h4>
14
<p>Этот тип дает возможность применять делегаты для нескольких объектов. Все это благодаря тому, что делегаты типа<strong>System.MulticastDelegate</strong>включают в себя экземпляр этого же класса, создаваемый в случае назначения объекта предыдущему классу. Новый экземпляр получает ссылку на последующий объект списка экземпляров делегатов. В результате<strong>System.MulticastDelegate</strong>поддерживает связанный перечень объектов для делегатов.</p>
14
<p>Этот тип дает возможность применять делегаты для нескольких объектов. Все это благодаря тому, что делегаты типа<strong>System.MulticastDelegate</strong>включают в себя экземпляр этого же класса, создаваемый в случае назначения объекта предыдущему классу. Новый экземпляр получает ссылку на последующий объект списка экземпляров делегатов. В результате<strong>System.MulticastDelegate</strong>поддерживает связанный перечень объектов для делегатов.</p>
15
<h3>Цепочка делегатов</h3>
15
<h3>Цепочка делегатов</h3>
16
<p>В случае вызова мультикаст-делегатов каждый экземпляр в цепочке будет вызываться последовательно. Но это может обернуться проблемой, когда в одном из экземпляров сработает исключение либо он вернет результат не void-типа.</p>
16
<p>В случае вызова мультикаст-делегатов каждый экземпляр в цепочке будет вызываться последовательно. Но это может обернуться проблемой, когда в одном из экземпляров сработает исключение либо он вернет результат не void-типа.</p>
17
<p>На этом всё: мы рассмотрели принципы работы мультикаст-делегатов на C#, а также примеры их реализации.</p>
17
<p>На этом всё: мы рассмотрели принципы работы мультикаст-делегатов на C#, а также примеры их реализации.</p>
18
<p><em><a>Источник</a></em></p>
18
<p><em><a>Источник</a></em></p>
19
19