Делегат — это тип ссылки, который хранит данные о сигнатуре метода.
Делегат — это объект, который ссылается на метод.
Объект делегата может вызывать разные методы во время выполнения, а не во время компиляции.
Синтаксис:
[атрибут] модификатор_доступа delegate тип имя_делегата ([список_параметров]);
Делегат — это объект, который ссылается на метод.
Объект делегата может вызывать разные методы во время выполнения, а не во время компиляции.
Синтаксис:
[атрибут] модификатор_доступа delegate тип имя_делегата ([список_параметров]);
Многоадресная передача — это способность создавать список вызовов методов, которые должны автоматически вызываться при вызове делегата.
Создается экземпляр делегата, а затем для добавления методов в эту цепочку используется оператор "+=", а для удаления из цепочки вызовов используется оператор "-=".
Делегат многоадресной передачи имеет одно ограничение — он должен возвращать тип void.
Создается экземпляр делегата, а затем для добавления методов в эту цепочку используется оператор "+=", а для удаления из цепочки вызовов используется оператор "-=".
Делегат многоадресной передачи имеет одно ограничение — он должен возвращать тип void.
Main.cs
usingSystem;//для многоадресной передачи делегат должен иметь тип voidpublicdelegatevoiddlgMessage();//обратите ВНИМАНИЕ, класс вообще отсутствуетclassProgram {-
publicstaticintMain() { -
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 =newdlgMessage[] {dM1, dM2, dM3, dM4, dM5}; -
for(inti=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(); -
return0; -
} }
usingSystem;//для многоадресной передачи делегат должен иметь тип voidpublicdelegatevoiddlgMessage();//обратите ВНИМАНИЕ, класс вообще отсутствуетclassProgram {-
publicstaticintMain() { -
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 =newdlgMessage[] {dM1, dM2, dM3, dM4, dM5}; -
for(inti=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(); -
return0; -
} }
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