HTML Diff
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