Многообъектные делегаты
В коде Matem2 делегат Mydelegate и метод calculate имеют одинаковую сигнатуру в соответствии с общими правилами. Для обращения через делегат к методу используется переменная int chislo, не содержащая вводимых значений для вычислений. Мы использовали один экземпляр делегата для обращения к одному методу, причем для вычисления значения новой переменной мы каждый раз ее объявляли. Однако делегат может вмещать в себя несколько методов. Такой делегат называется многообъектным (множественным) — при обращении к нему он последовательно вызывает каждый метод.
Создайте новое консольное приложение. Назовите его Matem3. Рассмотрим листинг с комментариями этого приложения (результат — рис. 1.35):
using System;
namespace Matem3 { class matematika {
public int a;
public void calculatesamochislo(int chislo) { Console.WriteLine ("Само число: " + a); } public void calculatecvadrat(int chislo) { int b = a*a; Console.WriteLine ("\nКвадрат: " + b); } public void calculatecub(int chislo) { int c = a*a*a; Console.WriteLine ("\nКуб: " + c); } }
class Class1 { delegate void Mydelegate(int chislo);
[STAThread] static void Main(string[] args) { matematika primer = new matematika(); Mydelegate del = new Mydelegate(primer.calculatesamochislo); //Экземпляру делегата del добавляем метод calculatecvadrat del+= new Mydelegate(primer.calculatecvadrat); //Экземпляру делегата del добавляем метод calculatecvadrat del+= new Mydelegate(primer.calculatecub); primer.a = 2; del(1); // //Развернутый вариант // del=del + new Mydelegate(primer.calculatecvadrat); // del = del+ new Mydelegate(primer.calculatecub); // primer.a = 2; // del(1);
} } }
Листинг 1.5.
В языке С# вы уже сталкивались с сокращенной записью операторов, так, выражение x += y в развернутом виде означает x = x + y. Делегаты понимают синтаксис + и += , и поэтому в комментарии указывается развернутый вариант добавления методов. Делегаты понимают также операции – и –= для удаления вызовов методов из делегата.

Рис. 1.35. Результат приложения Matem3
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий