English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C# базовый курс

C# продвинутый курс

C#面向对象(OOP)

Делегат Action в C#

Action - это тип делегата, определенный в пространстве имен System. Тип делегата Action аналогичен делегату Func, за исключением того, что делегат Action не возвращает значение. Иначе говоря, делегат Action можно использовать с методами, имеющими возвращаемый тип void.

Что такое гетерогенный делегат Action

Action<T> - это вбудованный гетерогенный делегат в .NET Framework, который можно использовать для передачи методов в виде параметра без необходимости явного объявления пользовательских делегатов. Обернутый метод должен соответствовать методу, определенному делегатом. То есть, обернутый метод должен иметь один параметр, передаваемый по значению, и не должен возвращать значение.

Например, следующий делегат распечатывает значение int.

public delegate void Print(int val);
static void ConsolePrint(int i)
{
    Console.WriteLine(i);
{}
static void Main(string[] args)
{           
    Print prnt = ConsolePrint;
    prnt(10);
{}
Вывод:
10

Вы можете использовать делегат Action вместо вышеуказанного делегата Print, например:

static void ConsolePrint(int i)
{
    Console.WriteLine(i);
{}
static void Main(string[] args)
{
    Action<int> printActionDel = ConsolePrint;
    printActionDel(10);
{}

Вы можете использовать ключевое слово new или напрямую назначить метод для инициализации делегата Action:

Action<int> printActionDel = ConsolePrint;
//или
Action<int> printActionDel = new Action<int>(ConsolePrint);

Делегат Action может принимать до 16 различных типов входных параметров.

Делегат Action и анонимный метод

Анонимный метод также можно分配 делегату Action, например:

static void Main(string[] args)
{
    Action<int> printActionDel = delegate(int i)
                                {
                                    Console.WriteLine(i);
                                }
    printActionDel(10);
{}
Вывод:
10

Делегат Action и лямбда-выражение

Лямбда-выражение также может использоваться с делегатом Action:

static void Main(string[] args)
{
    Action<int> printActionDel = i => Console.WriteLine(i);
       
    printActionDel(10);
{}

Таким образом, вы можете использовать любые методы, не возвращающие значения Action делегата.

Пример использования делегата Action

  • Делегат Action принимает от 0 до 16 параметров и не возвращает значения.

  • Action означает делегат без параметров и без возвращаемого значения.

  • Action<int, string> означает делегат с传入ными параметрами int, string и без возвращаемого значения.

  • Action<int, string, bool> означает делегат с传入ными параметрами int, string, bool и без возвращаемого значения.

  • Action<int, int, int, int> означает делегат, который принимает 4 параметра типа int и не возвращает никакого значения.

Преимущества делегатов Action и Func

  1. Легко и быстро определить делегат.

  2. Сокращение кода.

  3. Совместимые типы во всем приложении.

Темы, которые нужно запомнить

  1. Делегат Action аналогичен делегату Func, но делегат Action не возвращает никакого содержимого. Тип возвращаемого значения должен быть void.

  2. Делегат Action может иметь от 0 до 16 входных параметров.

  3. Делегат Action может использоваться с анонимными методами или lambda-выражениями.