delegate (Referência de C#)delegate (C# Reference)

A declaração de um tipo de delegado é semelhante a uma assinatura de método.The declaration of a delegate type is similar to a method signature. Ela tem um valor retornado e parâmetros de qualquer tipo:It has a return value and any number of parameters of any type:

public delegate void TestDelegate(string message);
public delegate int TestDelegate(MyType m, long num);

Um delegate é um tipo de referência que pode ser usado para encapsular um método nomeado ou anônimo.A delegate is a reference type that can be used to encapsulate a named or an anonymous method. Representantes são semelhantes a ponteiros de função em C++. No entanto, os representantes são fortemente tipados e seguros.Delegates are similar to function pointers in C++; however, delegates are type-safe and secure. Para aplicativos de representantes, consulte Representantes e Representantes genéricos.For applications of delegates, see Delegates and Generic Delegates.

ComentáriosRemarks

Os representantes são a base dos Eventos.Delegates are the basis for Events.

Um delegado pode ser instanciado associando-o a um método nomeado ou anônimo.A delegate can be instantiated by associating it either with a named or anonymous method. Para obter mais informações, consulte Métodos anônimos e Métodos nomeados.For more information, see Named Methods and Anonymous Methods.

O delegado deve ser instanciado com um método ou expressão lambda que tenha um tipo de retorno compatível e parâmetros de entrada.The delegate must be instantiated with a method or lambda expression that has a compatible return type and input parameters. Para obter mais informações sobre o grau de variação permitido na assinatura do método, consulte Variação em representantes.For more information on the degree of variance that is allowed in the method signature, see Variance in Delegates. Para uso com métodos anônimos, o delegado e o código a ser associado a ele são declarados juntos.For use with anonymous methods, the delegate and the code to be associated with it are declared together. As duas formas de instanciar representantes são discutidas nesta seção.Both ways of instantiating delegates are discussed in this section.

ExemploExample

// Declare delegate -- defines required signature:
delegate double MathAction(double num);

class DelegateTest
{
    // Regular method that matches signature:
    static double Double(double input)
    {
        return input * 2;
    }

    static void Main()
    {
        // Instantiate delegate with named method:
        MathAction ma = Double;

        // Invoke delegate ma:
        double multByTwo = ma(4.5);
        Console.WriteLine("multByTwo: {0}", multByTwo);

        // Instantiate delegate with anonymous method:
        MathAction ma2 = delegate(double input)
        {
            return input * input;
        };

        double square = ma2(5);
        Console.WriteLine("square: {0}", square);

        // Instantiate delegate with lambda expression
        MathAction ma3 = s => s * s * s;
        double cube = ma3(4.375);

        Console.WriteLine("cube: {0}", cube);
    }
    // Output:
    // multByTwo: 9
    // square: 25
    // cube: 83.740234375
}

Especificação da linguagem C#C# language specification

Para obter mais informações, consulte a Especificação da linguagem C#.For more information, see the C# Language Specification. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso de C#.The language specification is the definitive source for C# syntax and usage.

Consulte tambémSee also