Делегат — это тип ссылки, который хранит данные о сигнатуре метода.
Делегат — это объект, который ссылается на метод.
Объект делегата может вызывать разные методы во время выполнения, а не во время компиляции.
Синтаксис:
[атрибут] модификатор_доступа delegate тип имя_делегата ([список_параметров]);
Делегат — это объект, который ссылается на метод.
Объект делегата может вызывать разные методы во время выполнения, а не во время компиляции.
Синтаксис:
[атрибут] модификатор_доступа delegate тип имя_делегата ([список_параметров]);
Многоадресная передача — это способность создавать список вызовов методов, которые должны автоматически вызываться при вызове делегата.
Создается экземпляр делегата, а затем для добавления методов в эту цепочку используется оператор "+=", а для удаления из цепочки вызовов используется оператор "-=".
Делегат многоадресной передачи имеет одно ограничение — он должен возвращать тип void.
Создается экземпляр делегата, а затем для добавления методов в эту цепочку используется оператор "+=", а для удаления из цепочки вызовов используется оператор "-=".
Делегат многоадресной передачи имеет одно ограничение — он должен возвращать тип void.
Main.cs
using
System;
//для многоадресной передачи делегат должен иметь тип void
public
delegate
void
dlgMessage();
//обратите ВНИМАНИЕ, класс вообще отсутствует
class
Program {
-
public
static
int
Main() {
-
dlgMessage dM0 =
null
;
-
dlgMessage dM1 = () => Console.Write(
"New York"
);
-
dlgMessage dM2 = () => Console.Write(
" is"
);
-
dlgMessage dM3 = () => Console.Write(
" a"
);
-
dlgMessage dM4 = () => Console.Write(
" big"
);
-
dlgMessage dM5 = () => Console.Write(
" city"
);
-
//помещаем объекты в массив
-
dlgMessage[] arra =
new
dlgMessage[] {dM1, dM2, dM3, dM4, dM5};
-
for
(
int
i=0; i<arra.Length; i++) {
-
//добавление в цепочку вызова делегатов
-
dM0 += arra[i];
-
}
-
dM0();
-
Console.WriteLine();
-
Console.WriteLine();
-
//удаление из цепочки вызова делегата вручную
-
dM0 -= dM5;
-
dM0();
-
Console.WriteLine();
-
dM0 -= dM4;
-
dM0();
-
Console.WriteLine();
-
dM0 -= dM3;
-
dM0();
-
Console.WriteLine();
-
dM0 -= dM2;
-
dM0();
-
Console.WriteLine();
-
Console.ReadKey();
-
return
0;
-
}
}
using
System;
//для многоадресной передачи делегат должен иметь тип void
public
delegate
void
dlgMessage();
//обратите ВНИМАНИЕ, класс вообще отсутствует
class
Program {
-
public
static
int
Main() {
-
dlgMessage dM0 =
null
;
-
dlgMessage dM1 = () => Console.Write(
"New York"
);
-
dlgMessage dM2 = () => Console.Write(
" is"
);
-
dlgMessage dM3 = () => Console.Write(
" a"
);
-
dlgMessage dM4 = () => Console.Write(
" big"
);
-
dlgMessage dM5 = () => Console.Write(
" city"
);
-
//помещаем объекты в массив
-
dlgMessage[] arra =
new
dlgMessage[] {dM1, dM2, dM3, dM4, dM5};
-
for
(
int
i=0; i<arra.Length; i++) {
-
//добавление в цепочку вызова делегатов
-
dM0 += arra[i];
-
}
-
dM0();
-
Console.WriteLine();
-
Console.WriteLine();
-
//удаление из цепочки вызова делегата вручную
-
dM0 -= dM5;
-
dM0();
-
Console.WriteLine();
-
dM0 -= dM4;
-
dM0();
-
Console.WriteLine();
-
dM0 -= dM3;
-
dM0();
-
Console.WriteLine();
-
dM0 -= dM2;
-
dM0();
-
Console.WriteLine();
-
Console.ReadKey();
-
return
0;
-
}
}
New York is a big city
New York is a big
New York is a
New York is
New York
New York is a big
New York is a
New York is
New York