Шаг 173.
Язык программирования C#. Начала.
Делегаты и события. Знакомство с анонимными методами

    На этом шаге мы приведем общие сведения о таких методах.

    На предыдущих шагах мы имели дело с примерами, в которых переменным типа делегата в качестве значения присваивались ссылки на методы. Методы были статические или нестатические, но в любом случае они описывались заранее в соответствующем классе. Можно сказать, что эти методы имели самостоятельную ценность и теоретически мы могли бы их использовать так, как мы обычно использовали методы, не выполняя на них никакие ссылки с привлечением экземпляров делегата. С другой стороны, когда мы вызываем экземпляр делегата, то речь идет о вызове метода или методов - то есть о выполнении некоторой последовательности команд. Поэтому, в рамках концепции использования делегатов, логично было бы иметь возможность связывать экземпляры делегатов с некоторым блоком программного кода, который выполнялся бы при вызове экземпляра делегата и который бы не нужно было описывать в классе в виде метода. Такая возможность имеется. Реализуется она с помощью анонимных методов.

    Анонимный метод - это оформленный особым образом блок программного кода, который можно присвоить в качестве значения переменной типа делегата. В результате такой операции создается экземпляр делегата (на который будет ссылаться переменная). Этот экземпляр делегата ссылается на метод, который будет вызываться при вызове экземпляра делегата. Причем под методом здесь понимается набор команд, содержащийся в описании анонимного метода.

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

delegate(apryменты){
  // Тело метода
}

    Анонимный метод не может быть вызван сам по себе. Как отмечалось выше, анонимный метод (блок с описанием метода) присваивается в качестве значения переменной типа делегата. При этом анонимный метод может содержать ссылки на внешние (по отношению к методу) переменные.


Тип возвращаемого результата для анонимного метода не указывается. При этом анонимный метод может возвращать результат. И здесь нужно учесть, что анонимный метод существует не сам по себе, а присваивается в качестве значения переменной делегата. Но при описании соответствующего делегата был указан тип результата для метода, который может присваиваться в качестве значения экземпляру делегата. Получается, что тип результата анонимного метода неявно определяется описанием делегата (определяющего тип переменной, которой присваивается анонимный метод).

    На следующем шаге мы рассмотрим пример использования анонимных методов.




Предыдущий шаг Содержание Следующий шаг