Добавить в цитаты Настройки чтения

Страница 226 из 502

<b>using System;</b>

<b>// Объявить тип делегата, </b>

<b>delegate void CountIt();</b>

<b>class AnonMethDemo {</b>

<b>  static void Main() {</b>

<b>    // Далее следует код для подсчета чисел, передаваемый делегату</b>

<b>    // в качестве анонимного метода.</b>

<b>    CountIt count = delegate {</b>

<b>      // Этот кодовый блок передается делегату,</b>

<b>      for (int i=0; i &lt;= 5; i++)</b>

<b>        Console.WriteLine(i) ;</b>

<b>    }; // обратите внимание на точку с запятой</b>

<b>    count();</b>

<b>  }</b>

<b>}</b>

В данной программе сначала объявляется тип делегата CountIt без параметров и с возвращаемым типом void. Далее в методе Main() создается экземпляр count делегата CountIt, которому передается кодовый блок, следующий после ключевого слова delegate. Именно этот кодовый блок и является анонимным методом, который будет выполняться при обращении к делегату count. Обратите внимание на то, что после кодового блока следует точка с запятой, фактически завершающая оператор объявления. Ниже приведен результат выполнения данной программы.

<b>0</b>

<b>1</b>

<b>2</b>

<b>3</b>

<b>4</b>

<b>5</b>

Анонимному методу можно передать один или несколько аргументов. Для этого достаточно указать в скобках список параметров после ключевого слова delegate, а при обращении к экземпляру делегата — передать ему соответствующие аргументы. В качестве примера ниже приведен вариант предыдущей программы, измененный с целью передать в качестве аргумента конечное значение для подсчета.

<b>// Продемонстрировать применение анонимного метода, принимающего аргумент, </b>

<b>using System;</b>

<b>// Обратите внимание на то, что теперь у делегата Countlt имеется параметр,</b>

<b>delegate void CountIt(int end);</b>

<b>class AnonMethDemo2 {</b>

<b>  static void Main() {</b>

<b>    // Здесь конечное значение для подсчета передается анонимному методу.</b>

<b>    CountIt count = delegate(int end) {</b>

<b>      for(int i=0; i &lt;= end; i++)</b>

<b>        Console.WriteLine(i);</b>

<b>    };</b>

<b>    count(3);</b>

<b>    Console.WriteLine();</b>

<b>    count(5);</b>

<b>  }</b>

<b>}</b>

В этом варианте программы делегат CountIt принимает целочисленный аргумент. Обратите внимание на то, что при создании анонимного метода список параметров указывается после ключевого слова delegate. Параметр end становится доступным для кода в анонимном методе таким же образом, как и при создании именованного метода. Ниже приведен результат выполнения данной программы.

<b>0</b>

<b>1</b>

<b>2</b>

<b>3</b>

<b>0</b>

<b>1</b>

<b>2</b>

<b>3</b>

<b>4</b>

<b>5</b>

Анонимный метод может возвращать значение. Для этой цели служит оператор return, действующий в анонимном методе таким же образом, как и в именованном методе. Как и следовало ожидать, тип возвращаемого значения должен быть совместим с возвращаемым типом, указываемым в объявлении делегата. В качестве примера ниже приведен код, выполняющий подсчет с суммированием и возвращающий результат.

<b>// Продемонстрировать применение анонимного метода,</b>

<b>//возвращающего значение.</b>

<b>using System; </b>

<b>// Этот делегат возвращает значение,</b>

<b>delegate int CountIt(int end);</b>

<b>class AnonMethDemo3 {</b>

<b>  static void Main() {</b>

<b>    int result;</b>

<b>    // Здесь конечное значение для подсчета передается анонимному методу.</b>

<b>    //А возвращается сумма подсчитанных чисел.</b>

<b>    CountIt count = delegate (int end) {</b>

<b>      int sum = 0;</b>

<b>      for(int i=0; i &lt;= end; i++) {</b>

<b>        Console.WriteLine(i);</b>

<b>        sum += i;</b>