Анонимные методы в C#: Упрощение работы с делегатами
Суть анонимных методов
Мы уже знаем, что делегаты ссылаются на методы с соответствующей сигнатурой. Анонимные методы позволяют передать блок кода в качестве параметра делегата. Это методы без имени, состоящие только из тела.
В анонимном методе не нужно указывать тип возвращаемого значения — он выводится из оператора return внутри тела метода.
Написание анонимного метода
Анонимные методы объявляются при создании экземпляра делегата с помощью ключевого слова delegate. Например:
delegate void NumberChanger(int n);
...
NumberChanger nc = delegate(int x) {
Console.WriteLine("Anonymous Method: {0}", x);
};
Блок кода Console.WriteLine("Anonymous Method: {0}", x); является телом анонимного метода.
Делегат можно вызывать как с анонимными, так и с именованными методами одинаково — передавая параметры методу в объект делегата. Например: nc(10);
Пример
Ниже демонстрируется использование анонимных и именованных методов с одним делегатом.
Live Demousing System;
delegate void NumberChanger(int n);
namespace DelegateAppl {
class TestDelegate {
static int num = 10;
public static void AddNum(int p) {
num += p;
Console.WriteLine("Named Method: {0}", num);
}
public static void MultNum(int q) {
num *= q;
Console.WriteLine("Named Method: {0}", num);
}
public static int getNum() {
return num;
}
static void Main(string[] args) {
// создание делегата с анонимным методом
NumberChanger nc = delegate(int x) {
Console.WriteLine("Anonymous Method: {0}", x);
};
// вызов через анонимный метод
nc(10);
// инстанцирование делегата именованным методом
nc = new NumberChanger(AddNum);
nc(5);
// другой именованный метод
nc = new NumberChanger(MultNum);
nc(2);
Console.ReadKey();
}
}
}
Результат выполнения:
Anonymous Method: 10 Named Method: 15 Named Method: 30
Язык C
- Абстрактные классы и методы в C#: практическое руководство
- Частичные классы и методы в C#: понимание и применение
- Sealed-классы и sealed-методы в C#: когда использовать, примеры и повышение безопасности кода
- Освоение перегрузки методов в C#: концепции, примеры и лучшие практики
- Lambda-функции в Python: практическое руководство по анонимным функциям
- Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
- Java 8 Default Methods: улучшение интерфейсов и обратная совместимость
- Методы в C#: определение, вызов, рекурсия и параметры
- Понимание делегатов в C#: Руководство по ссылкам на методы и событиям
- Метод EPA 21: комплексный протокол обнаружения и устранения утечек