Иллюстрированный самоучитель по VB.NET



              


Групповые делегаты


Групповые делегаты

В приведенных выше примерах в делегате инкапсулировался адрес одной функции или процедуры. Нередко в делегатах требуется инкапсулировать сразу несколько процедур (инкапсуляция нескольких функций особого смысла не имеет — каким должно быть возвращаемое значение?). Подобные делегаты называются групповыми (multicast) и реализуются в виде делегата, содержащего несколько однотипных делегатов. При наличии группового делегата все инкапсулированные процедуры вызываются одним методом Invoke, причем это происходит в соответствии с порядком занесения их делегатов в групповой делегат.

Чтобы создать групповой делегат, следует объединить минимум двух делегатов одного типа и присвоить результат переменной того же типа. Задача решается статическим методом Combine класса System.Delegate, который возвращает новый делегат.

Допустим, firstDel и secDel — экземпляры класса MyMultiCastDelegate. Следующая команда объединяет firstDel и secDel в групповой делегат, хранящийся в

firstDel: firstDel =System.Delegate.Combine(firstDel,secDel)

Ниже приведено простое приложение, объединяющее адреса нескольких функций в групповом делегате:

1 Option Strict On

2 Module Modulel

3 Sub Main()

4 Console.WriteLine("Calling delegate function...")

5 RegisterDelegate(AddressOf CallBackHandlerl)

6 RegisterDelegate(AddressOf CallBackHandler2)

7 Call Delegates ()

8 Console.WriteLine(

9 "Finished calling.delegate function...")

10 Console.ReadLine()

11 End Sub

12 Public Sub CallBackHandlerHByVal lngVal As RETURNJALUES)

13 Console.WriteLine("Callback 1 returned " & IngVal)

14 End Sub

15 Public Sub CallBackHandler2(ByVallngVal As RETURNJALUES)

16 Console.WriteLine("Callback 2 returned " & IngVal)

17 End Sub

18 End Module

19 Module Module2

20 Public Delegate Sub CallBackFunc(ByVallngValAs RETURN_VALUES)

21 Private m_cbFunc As CallBackFunc

22 Public Enum RETURN_VALUES

23 VALUE_SUCCESS




Содержание  Назад  Вперед