Resumo : neste tutorial, você aprenderá sobre o grupo de métodos C# e como funciona a conversão do grupo de métodos para o processo delegado.
O que é um grupo de métodos em C#
Em C#, um grupo de métodos é um conjunto de métodos sobrecarregados que compartilham o mesmo nome, mas possuem listas de parâmetros diferentes. Ao se referir a um método pelo seu nome sem especificar seus parâmetros, você está se referindo ao grupo de métodos.
Por exemplo, a Calculator
classe a seguir possui dois Add
métodos com tipos de parâmetros diferentes:
class Calculator
{
public static int Add(int a, int b) => a + b;
public static double Add(double a, double b) => a + b;
}
Linguagem de código: C# ( cs )
Quando você se refere ao Add
método sem especificar seus argumentos, você está se referindo ao Add
grupo de métodos.
Conversão de grupo de métodos para delegado
Em C#, a conversão de um grupo de métodos em delegado é o processo de conversão de um grupo de métodos em um tipo delegado.
Um delegado é um tipo que representa uma referência a um método com uma assinatura especificada. Ao usar um delegado, você pode invocar um método ou passar a referência do método como argumento para outros métodos.
Quando você usa um grupo de métodos em um contexto que requer um delegado, o compilador C# executa automaticamente a conversão do grupo de métodos em delegado.
Por exemplo, você pode atribuir um grupo de métodos a uma variável delegada como esta:
class Calculator
{
public static int Add(int a, int b) => a + b;
public static double Add(double a, double b) => a + b;
}
class Program
{
delegate int Calculate(int a, int b);
public static void Main(string[] args)
{
Calculate cal = Calculator.Add;
var result = cal(10, 20);
Console.WriteLine(result);
}
}
Linguagem de código: C# ( cs )
Neste exemplo, o Add
grupo de métodos é convertido para o Calculate
tipo delegado, que possui a mesma assinatura do Calculate
método. Isso permite atribuir a referência do método a uma variável delegada cal
, que pode então ser invocada com um argumento de string.
Observe que a conversão do grupo de métodos em delegado só é permitida quando o grupo de métodos tem uma única melhor correspondência para a assinatura do delegado. Se você tiver vários métodos no grupo que possam corresponder à assinatura do delegado, o C# emitirá um erro.
Conversão de grupo de métodos aprimorada para delegar em C# 11
O exemplo a seguir demonstra a conversão aprimorada do grupo de métodos para o recurso delegado introduzido no C# 11:
using static System.Console;
class Calculator
{
public static int Add(int a, int b) => a + b;
public static double Add(double a, double b) => a + b;
}
class Program
{
static int Calculate(int x, int y, Func<int, int, int> f) => f(x, y);
public static void Main(string[] args)
{
int x = 20,
y = 10;
var result = Calculate(x, y, Calculator.Add);
WriteLine(result); // 30
}
}
Linguagem de código: C# ( cs )
Saída:
30
Neste exemplo, em vez de passar uma expressão lambda para o Calculate()
método:
var result = Calculate(x, y, (x,y) => Calculator.Add(x,y));
Linguagem de código: PHP ( php )
você pode passar um grupo de métodos para ele:
var result = Calculate(x, y, Calculator.Add);
Linguagem de código: JavaScript ( javascript )
Nos bastidores, o compilador C# converte o grupo de métodos no delegado que aceita dois inteiros e retorna um inteiro.
Resumo
- Um grupo de métodos é uma coleção de métodos que possuem o mesmo nome, mas parâmetros diferentes.
- A conversão de grupo de métodos em delegado é o processo de conversão automática de um grupo de métodos em um tipo delegado que pode ser usado para fazer referência a um método com uma assinatura correspondente.