Conversão de grupo de métodos C# para delegado

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 Calculatorclasse a seguir possui dois Addmé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 Addmétodo sem especificar seus argumentos, você está se referindo ao Addgrupo 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 Addgrupo de métodos é convertido para o Calculatetipo delegado, que possui a mesma assinatura do Calculatemé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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *