ВУЗ:
Составители:
Рубрика:
83
Преимуществом анонимных методов состоит в том, что уменьшается
объем кода, не нужно описывать метод только для того, чтобы исполь-
зовать его с делегатом. Такой способ удобен при задании делегатов для
событий.
Используя экземпляр делегата можно вызвать метод, ссылка на
который хранится в нем, используя обычную запись вызова методов.
Например: float b = func(2.5F, 3.4F);
Фактически получается, что переменная func становится другим
именем метода Plus. В этом случае в действительности будет вызы-
ваться метод с именем Plus, ссылка на который сохранена в func.
При вызове на выполнение экземпляра делегата, который содер-
жит несколько ссылок, будут последовательно вызываться на выполне-
ние все методы, ссылки на которые хранятся в данном экземпляре. Рас-
смотрим следующий пример:
class Program {
public delegate float Compute(float a, float b);
static void Main() {
Comp func = null;
func += new Comp(Plus); //или func += Plus;
func += new Comp(Multi); //или func += Multi;
float b = func(2.0F, 3.5F);
}
public static float Plus(float a, float b)
{ return a + b; }
public static float Multi(float a, float b)
{ return a * b; }
}
Здесь в классе Program объявлен новый тип – делегат Comp. А также
описаны два метода: Plus и Multi, сигнатуры которых соответствуют
сигнатуре, заданной делегатом Comp. Переменная func в методе Main
являются экземпляром класса Comp и ей присваиваются ссылки описан-
ные в классе методы. При выполнении операции выполнения методов
для переменной func: float b = func(2.0F, 3.5F); на выполне-
ние будут вызываться два метода Plus и Multi. Результат выполнения
последнего метода будет сохранен в переменной b (в данном случае это
будет 7.0)
4.10.2. События
С помощью делегатов в классах можно описывать события. Со-
бытия это способ взаимодействия между объектами разных классов.
Объекты одного класса могут использовать объекты других классов.
Для этого они создают объекты требуемого класса и вызывают его ме-
Страницы
- « первая
- ‹ предыдущая
- …
- 81
- 82
- 83
- 84
- 85
- …
- следующая ›
- последняя »