Share via


Delegados com nomeados versus métodos anônimo (guia de programação translation from VPE for Csharp)

A delegado pode ser associado um método nomeado.Quando você instancia um delegado usando um método nomeado, o método é passado sistema autônomo um parâmetro, por exemplo:

// Declare a delegate:
delegate void Del(int x);

// Define a named method:
void DoWork(int k) { /* ... */ }

// Instantiate the delegate using the method as a parameter:
Del d = obj.DoWork;

Ele é chamado usando um método nomeado.Delegados construídos com um método nomeado podem encapsular ambos um estático método ou um método de instância.Métodos nomeados são a única forma de criar uma instância de um delegado em versões anteriores do translation from VPE for Csharp.No entanto, em uma situação onde criar um novo método é indesejado sobrecarga, translation from VPE for Csharp permite instanciar um delegado e especifique um bloco de código que o representante processará quando for chamado imediatamente.O bloco pode conter uma expressão lambda ou um método anônimo.Para obter mais informações, consulte Funções anônimo (guia de programação translation from VPE for Csharp).

Comentários

O método que você passa como um parâmetro de delegate deve ter a mesma assinatura da declaração do Delegate.

Uma instância de Delegate pode encapsular o  método Estático ou Instânciado.

Embora o delegado pode usar um check-out parâmetro, não recomendamos sua utilização com delegados de evento de multicast porque você não sabe qual delegate será chamado.

Exemplo 1

O seguinte é um exemplo simples de como declarar e usar um delegate.Observe que ambos delegates, Del, e o método associado, MultiplyNumbers,  possuem a mesma assinatura

// Declare a delegate
delegate void Del(int i, double j);

class MathClass
{
    static void Main()
    {
        MathClass m = new MathClass();

        // Delegate instantiation using "MultiplyNumbers"
        Del d = m.MultiplyNumbers;

        // Invoke the delegate object.
        System.Console.WriteLine("Invoking the delegate using 'MultiplyNumbers':");
        for (int i = 1; i <= 5; i++)
        {
            d(i, 2);
        }

        // Keep the console window open in debug mode.
        System.Console.WriteLine("Press any key to exit.");
        System.Console.ReadKey();
    }

    // Declare the associated method.
    void MultiplyNumbers(int m, double n)
    {
        System.Console.Write(m * n + " ");
    }
}
/* Output:
    Invoking the delegate using 'MultiplyNumbers':
    2 4 6 8 10
*/

Exemplo 2

No exemplo a seguir, um delegate é mapeado para ambos os métodos, estático e instaciado, e retorna informações específicas de cada um.

// Declare a delegate
delegate void Del();

class SampleClass
{
    public void InstanceMethod()
    {
        System.Console.WriteLine("A message from the instance method.");
    }

    static public void StaticMethod()
    {
        System.Console.WriteLine("A message from the static method.");
    }
}

class TestSampleClass
{
    static void Main()
    {
        SampleClass sc = new SampleClass();

        // Map the delegate to the instance method:
        Del d = sc.InstanceMethod;
        d();

        // Map to the static method:
        d = SampleClass.StaticMethod;
        d();
    }
}
/* Output:
    A message from the instance method.
    A message from the static method.
*/

Consulte também

Tarefas

Como: Combinar representantes (Representantes Multicast) (Guia de programação C#)

Conceitos

Guia de Programação C#

Referência

Representantes (guia de programação C#)

Eventos (Guia de programação do C#)