Главная » C# » Анонимные методы в Visual C# (Sharp)

0

Начиная с версии С# 2.0, использование делегатов  можно  сделать  более эффектиым с помощью анонимных методов. В предыдущих примерах использования дегатов   код   для   вычисления   суммы   и   максимального   значения   был   определен в явных методах, содержащихся  в  типе.  При  использовании  анонимных  методов код метода определяется  в  вызове  метода.

Подход с применением анонимных методов использует тот же итератор класса и делегат ProcessValue. Разница же заключается в том, каким образом используются итератор и ProcessValue О . Методы реализации делегатов ProcessRunningTotal () и ProcessMaximumValue () больше не нужны, а вызывающий код модифицируется следующим образом:

List<int> 1st = new List<int> { 1, 2, 3, 4 }; int runningTotal = 0;

1st.Iterate{

delegate( int value)  { runningTotal += value;

}) ;

Console.WriteLine("Running total is (" + runningTotal + ")");

int maxValue = int.MinValue; 1st.Iterate{

delegate(int value) {

if (value > maxValue) { maxValue = value;

}

}) ;

Console.WriteLine("Maximum value is (" + maxValue + ")");

Анонимные методы выделены жирным шрифтом. Анонимный метод представляет собой полное объявление метода в другом методе. Сигнатурой метода является идентификатор delegate, за которым следуют параметры определенного делегата. Определять возвращаемое значение не требуется, т. к. оно подразумевается в обвлении делегата ProcessValue().

Теория в основе анонимных методов несколько сложновата, т. к. код анонимного метода не исполняется при объявлении метода. Лучшим способом  понять, как ротает анонимный метод, будет рассматривать его, как способ объявления кода, который будет исполнен позже.

Посмотрев на первую часть кода, выдленного жирным шрифтом, мы увидим, что данная реализация идентична  реализации метода ProcessRunningTotalО.  Объяяя анонимным метод для вычисления текущей суммы, код как бы говорит: "Когда вы готовы что-то делать, вот код, который нужно исполнять". Посмотрев на реалацию обоих анонимных методов, мы увидим ссылки на состояние, которое объяено в контексте родительского метода. Большим преимуществом анонимных модов является возможность разделения состояния.

Анонимные методы предпочтительны формально объявленным  методам  потому, что они предоставляют нам возможность написания компактного кода для решения проблемы без отказа от переносимости.

Источник: Гросс  К. С# 2008:  Пер. с англ. — СПб.:  БХВ-Петербург, 2009. — 576 е.:  ил. — (Самоучитель)

По теме:

  • Комментарии