Страница 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 <= 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 <= 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 <= end; i++) {</b>
<b> Console.WriteLine(i);</b>
<b> sum += i;</b>