День сто тридцать четвёртый. #ЗаметкиНаПолях
Анонимные методы
Создание анонимных методов – это способ передать блок кода в качестве параметра делегата:
- Область действия параметров анонимного метода - блок анонимного метода.
- Нельзя использовать операторы перехода (
- Анонимный метод не может получить доступ к параметрам
- В пределах блока анонимного метода нельзя получить доступ к небезопасному коду.
- Анонимные методы не допускаются в левой части оператора
- Локальные переменные и параметры, определённые в той же области, что и анонимный метод, называются внешними переменными анонимного метода:
Источник: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/anonymous-methods
Анонимные методы
Создание анонимных методов – это способ передать блок кода в качестве параметра делегата:
button1.Click += delegate(System.Object o, EventArgs e)…
{ MessageBox.Show("Click!"); };
// Создание делегатаАнонимные методы упрощают создание экземпляров делегатов, т.к. не нужно создавать отдельный именованный метод. Это может быть полезно в ситуации, когда создание метода не требуется, например, при создании нового потока:
delegate void Del(int x);
// Инициализация делегата анонимным методом
Del d = delegate(int k) { /* … */ };
void StartThread()Замечания
{
Thread t1 = new Thread
(delegate()
{
Console.Write("Hello, ");
Console.WriteLine("World!");
});
t1.Start();
}
- Область действия параметров анонимного метода - блок анонимного метода.
- Нельзя использовать операторы перехода (
goto
, break
или continue
) из анонимного метода во внешний код, либо наоборот.- Анонимный метод не может получить доступ к параметрам
in
, ref
или out
внешней области определения.- В пределах блока анонимного метода нельзя получить доступ к небезопасному коду.
- Анонимные методы не допускаются в левой части оператора
is
.- Локальные переменные и параметры, определённые в той же области, что и анонимный метод, называются внешними переменными анонимного метода:
int n = 0;Ссылка на внешнюю переменную
Del d = Delegate() {System.Console.WriteLine ("Copy #: {0}", ++n); };
n
захватывается при создании делегата. В отличие от локальных переменных, время жизни захваченной переменной увеличивается до тех пор, пока делегаты, ссылающиеся на анонимные методы, не будут подходить для сборки мусора.Источник: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/anonymous-methods