Exportieren (0) Drucken
Alle erweitern
Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen.
Übersetzung
Original

Delegaten mit benannten im Vergleich zu anonymen Methoden (C#-Programmierhandbuch)

Ein Delegat kann einer benannten Methode zugeordnet werden. Wenn Sie einen Delegaten mit einer benannten Methode instanziieren, wird die Methode als Parameter übergeben. Beispiel:


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


Dies wird als Verwendung einer benannten Methode bezeichnet. Mit einer benannten Methode erstellte Delegaten können entweder eine static-Methode oder eine Instanzmethode kapseln. Benannte Methoden sind die einzige Möglichkeit, in früheren Versionen von C# einen Delegaten zu instanziieren. In Situationen, in denen das Erstellen einer neuen Methode ein unerwünschter Aufwand wäre, ermöglicht es Ihnen C# jedoch, einen Delegaten zu instanziieren und sofort einen Codeblock anzugeben, den der Delegat bei Aufruf verarbeitet. Der Block kann entweder einen Lambda-Ausdruck oder eine anonyme Methoden enthalten. Weitere Informationen finden Sie unter Anonyme Funktionen (C#-Programmierhandbuch).

Die Methode, die Sie als Delegatparameter übergeben, muss über die gleiche Signatur verfügen wie die Delegatdeklaration.

Eine Delegatinstanz kapselt entweder eine statische oder eine Instanzenmethode.

Obwohl Delegaten einen out-Parameter verwenden können, ist dies für Multicast-Ereignisdelegaten nicht zu empfehlen, da nicht vorhersagbar ist, welcher Delegat aufgerufen wird.

Im Folgenden sehen Sie ein einfaches Beispiel für die Deklaration und Verwendung eines Delegaten. Beachten Sie, dass der Delegat Del und die zugeordnete Methode MultiplyNumbers die gleiche Signatur haben.


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


Im folgenden Beispiel gibt ein Delegat, der einer statischen und einer Instanzmethode zugeordnet wird, aus jeder dieser Methoden spezifische Informationen zurück.


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


Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2015 Microsoft