Udostępnij za pośrednictwem


Delegaty z metodami nazwanymi lub anonimowymi (Przewodnik programowania w języku C#)

A delegować może być skojarzona z nazwanym metody.Gdy przy użyciu metody nazwanego wystąpienia jest pełnomocnikiem, metoda jest przekazywana jako parametr, na przykład:

// 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;

Nazywa się to przy użyciu metody nazwane.Delegatów zbudowane przy użyciu metody nazwany można upakować albo statyczne metoda lub metody instancji.Nazwany metody są jedynym sposobem tworzenia wystąpienia delegata we wcześniejszych wersjach języka C#.Jednakże w sytuacji, gdy tworzenie nowej metody jest niepożądane napowietrznych, C# umożliwia tworzenia wystąpienia obiektu delegowanego i natychmiast określić blok kodu, który będzie przetwarzał pełnomocnika, gdy wywoływana jest.Blok może zawierać wyrażenie lambda lub metody anonimowej.Aby uzyskać więcej informacji, zobacz Funkcje anonimowe (Przewodnik programowania w języku C#).

Uwagi

Metoda, który jest przekazywany jako parametr obiektu delegowanego musi mieć taką samą sygnaturę jak deklaracji obiektu delegowanego.

Wystąpienie obiektu delegowanego hermetyzowania statycznych lub metody instancji.

Chociaż można użyć obiektu delegowanego z parametr, nie zaleca jego użycia z delegatów multiemisji zdarzeń, ponieważ nie wie, którego pełnomocnik będzie wywoływana.

Przykład 1

Poniżej przedstawiono prosty przykład deklarowania i za pomocą obiektu delegowanego.Warto zauważyć, że zarówno pełnomocnika, Deloraz metodę skojarzone, MultiplyNumbers, mają ten sam podpis

// 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
*/

Przykład 2

W poniższym przykładzie jednego delegata jest mapowany do zarówno statycznych i metod i zwraca określone informacje z każdej instancji.

// 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.
*/

Zobacz też

Zadania

Porady: łączenie obiektów delegowanych (obiekty delegowane multiemisji) (Przewodnik programowania w języku C#)

Informacje

Delegaty (Przewodnik programowania w języku C#)

Metody anonimowe (Przewodnik programowania w języku C#)

Zdarzenia (Przewodnik programowania w języku C#)

Koncepcje

Przewodnik programowania w języku C#