Анонимная функция в C# — это функция без названия, которая позволяет объявить и определить функцию прямо в месте её использования.
Анонимные функции могут быть очень полезны для создания компактного кода и для передачи блоков кода в качестве аргументов методам, принимающим делегаты или выражения.
### В C# существует два основных типа анонимных функций
##### 1. Лямбда-выражения
[[Лямбда-выражение (lambda expression)]]
##### 2. Анонимные методы
Анонимные методы (anonymous methods) - старый способ объявления анонимных функций, введён в C# 2.0. Они предоставляют способ создания делегатов без необходимости явного определения метода.
**Пример анонимного метода:**
```csharp
Func<int, int> square = delegate(int x) {
return x * x;
};
Console.WriteLine(square(5)); // Выводит 25
```
Анонимный метод без параметров:
```csharp
Action greet = delegate {
Console.WriteLine("Hello, World!");
};
greet(); // Выводит "Hello, World!"
```
### Производительность
Анонимные функции в C# компилируются в обычные методы, так что их производительность сопоставима с производительностью явно объявленных методов. Однако, стоит учитывать некоторые моменты:
- Частое создание анонимных функций может привести к незначительным накладным расходам при выполнении из-за дополнительных вызовов делегатов.
- Захват переменных (closure) в лямбда-выражениях или анонимных методах может привести к дополнительным расходам памяти, так как для этих переменных требуется создавать дополнительные объекты для поддержки их доступности внутри анонимной функции.