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

Delegate Func no C#

O C# contém tipos de delegates genéricos integrados Func e Action, portanto, na maioria das vezes, você não precisa definir delegates personalizados manualmente.

A classe Func, contida no espaço de nomes System, é uma delegate genérica. Ela possui zero ou mais parâmetros de entrada e um out Parâmetros. O último parâmetro é considerado parâmetro out.

O que é o delegate Func

O delegate Func representa delegates com tipo de retorno.

A classe Func, definida no espaço de nomes System, define um parâmetro in e um parâmetro out do delegate, conforme mostrado a seguir:

namespace System
{    
    public delegate TResult Func<in T, out TResult>(T arg);
}

O último parâmetro dentro dos colchetes <> é considerado o tipo de retorno, os outros parâmetros são considerados tipos de parâmetros de entrada, conforme mostrado na figura a seguir.

Delegado Func

Delegado Func com dois parâmetros de entrada e um parâmetro de saída será como mostrado a seguir.

Delegado Func

O seguinte delegado Func aceita dois parâmetros do tipo int e retorna um valor do tipo int:

Func<int, int, int> sum;

Você pode atribuir qualquer método aos func delegados acima, que precisam de doisintparâmetros e retorna umintvalor.

class Program
{
    static int Sum(int x, int y)
    {
        return x + y;
    }
    static void Main(string[] args)
    {
        Func<int, int, int> add = Sum;
        int result = add(10, 10);
        Console.WriteLine(result); 
    }
}
Saída:
20

O tipo de delegado Func pode incluir de 0 a16parâmetros de entrada diferentes. No entanto, deve conter um parâmetro out para o resultado. Por exemplo, o seguinte delegado Func não tem parâmetros de entrada e apenas contém parâmetros out.

Func<int> getRandomNumber;

Exemplo de explicação do tipo de delegado Func

  • Func pelo menos 0 parâmetros de entrada, até16um parâmetro de entrada, retornando genéricamente com base no valor de retorno. Deve haver um valor de retorno, não void.

  • Func<int> indica que não há parâmetros de entrada, o valor de retorno é int do delegado.

  • Func<object, string, int> indica que os parâmetros de entrada são object, string e o valor de retorno é int do delegado.

  • Func<object, string, int> indica que os parâmetros de entrada são object, string e o valor de retorno é int do delegado.

  • Func<T1,T2,T3,int> indica que o parâmetro de entrada é T1,T2,T3(Gênico), delegado que retorna um tipo int.

Delegado Func em C# com método anônimo

Você pode usar a palavra-chave delegate para atribuir um método anônimo a um delegado Func.

Func<int> getRandomNumber = delegate()
                            {
                                Random rnd = new Random();
                                return rnd.Next(1, 100);
                            };

Delegado Func em C# com Lambda

Func delegado também pode ser usado com expressão lambda, conforme mostrado a seguir:

Func<int> getRandomNumber = () => new Random().Next()1, 100);
//ou
Func<int, int, int> Sum = (x, y) => x + y;

 Ponto a lembrar

  1. Func é um tipo de delegado interno.

  2. O tipo de delegado Func deve retornar um valor.

  3. O tipo de delegado Func pode ter de zero a16um parâmetro de entrada.

  4. O tipo de delegado Func não permite parâmetros ref e out.

  5. O tipo de delegado Func pode ser usado junto com métodos anônimos ou expressões lambda.