operador delegate (referência do C#)

O operador delegate cria um método anônimo que pode ser convertido em um tipo delegado:

Func<int, int, int> sum = delegate (int a, int b) { return a + b; };
Console.WriteLine(sum(3, 4));  // output: 7

Observação

Começando com o C# 3, as expressões lambda fornecem uma maneira mais concisa e expressiva de criar uma função anônima. Use o operador => para construir uma expressão lambda:

Func<int, int, int> sum = (a, b) => a + b;
Console.WriteLine(sum(3, 4));  // output: 7

Para saber mais sobre recursos de expressões lambda, por exemplo, que capturam variáveis externas, confira Expressões lambda.

Você pode omitir a lista de parâmetros quando usa o operador delegate. Se você fizer isso, o método anônimo criado poderá ser convertido em um tipo delegado com qualquer lista de parâmetros, como mostra o exemplo a seguir:

Action greet = delegate { Console.WriteLine("Hello!"); };
greet();

Action<int, double> introduce = delegate { Console.WriteLine("This is world!"); };
introduce(42, 2.7);

// Output:
// Hello!
// This is world!

Essa é a única funcionalidade de métodos anônimos que não tem suporte por expressões lambda. Em todos os outros casos, uma expressão lambda é a forma preferida de gravar código embutido.

A partir do C# 9.0, você pode usar descartes para especificar dois ou mais parâmetros de entrada de um método anônimo que não são usados pelo método :

Func<int, int, int> constant = delegate (int _, int _) { return 42; };
Console.WriteLine(constant(3, 4));  // output: 42

Para compatibilidade com vertidas, se apenas um único parâmetro for chamado , será tratado como o nome _ desse parâmetro dentro de um método _ anônimo.

Também começando com o C# 9.0, você pode usar o static modificador na declaração de um método anônimo:

Func<int, int, int> sum = static delegate (int a, int b) { return a + b; };
Console.WriteLine(sum(10, 4));  // output: 14

Um método anônimo estático não pode capturar variáveis locais ou estado de instância de escopos delimitadores.

Você também usa a palavra-chave delegate para declarar um tipo delegado.

Especificação da linguagem C#

Para obter mais informações, confira a seção Expressões de função anônima da Especificação da linguagem C#.

Confira também