Delegaten mit benannten im Vergleich zu Anonyme Methoden (C#-Programmierhandbuch)Delegates with Named vs. Anonymous Methods (C# Programming Guide)

Ein Delegat kann einer benannten Methode zugeordnet werden.A delegate can be associated with a named method. Wenn Sie einen Delegaten mit einer benannten Methode instanziieren, wird die Methode als Parameter übergeben:When you instantiate a delegate by using a named method, the method is passed as a parameter, for example:

// 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 mit einer benannten Methode aufgerufen.This is called using a named method. Mit einer benannten Methode erstellte Delegaten können entweder eine statische Methode oder eine Instanzmethode kapseln.Delegates constructed with a named method can encapsulate either a static method or an instance method. Benannte Methoden sind die einzige Möglichkeit, einen Delegaten in früheren Versionen von C# zu instanziieren.Named methods are the only way to instantiate a delegate in earlier versions of C#. Wenn das Erstellen einer neuen Methode jedoch einen unerwünschten Aufwand für Sie darstellt, können Sie in C# einen Delegaten instanziieren und sofort einen Codeblock bestimmen, den der Delegat bei seinem Aufruf verarbeitet.However, in a situation where creating a new method is unwanted overhead, C# enables you to instantiate a delegate and immediately specify a code block that the delegate will process when it is called. Der Block kann entweder einen Lambdaausdruck oder eine anonyme Methode enthalten.The block can contain either a lambda expression or an anonymous method. Weitere Informationen finden Sie unter Anonyme Funktionen.For more information, see Anonymous Functions.

HinweiseRemarks

Die Methode, die Sie als Delegatparameter übergeben, muss die gleiche Signatur wie die Delegatdeklaration aufweisen.The method that you pass as a delegate parameter must have the same signature as the delegate declaration.

Eine Delegatinstanz kann entweder eine statische Methode oder eine Instanzmethode kapseln.A delegate instance may encapsulate either static or instance method.

Obwohl der Delegat einen out-Parameter verwenden kann, wird empfohlen, ihn nicht mit Multicast-Ereignisdelegaten zu verwenden, da Sie nicht wissen können, welcher Delegat aufgerufen wird.Although the delegate can use an out parameter, we do not recommend its use with multicast event delegates because you cannot know which delegate will be called.

Beispiel 1Example 1

In diesem einfachen Beispiel wird ein Delegat deklariert und verwendet.The following is a simple example of declaring and using a delegate. Beachten Sie, dass der Delegat Del und die zugeordnete Methode MultiplyNumbers dieselbe Signatur aufweisen.Notice that both the delegate, Del, and the associated method, MultiplyNumbers, have the same signature

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

Beispiel 2Example 2

Im folgenden Beispiel wird ein Delegat sowohl einer statischen Methode als auch einer Instanzmethode zugeordnet und gibt von jeder spezifische Informationen zurück.In the following example, one delegate is mapped to both static and instance methods and returns specific information from each.

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

Siehe auchSee Also

C#-ProgrammierhandbuchC# Programming Guide
DelegatenDelegates
Anonyme MethodenAnonymous Methods
How to: Combine Delegates (Multicast Delegates) (Vorgehensweise: Kombinieren von Delegaten (Multicastdelegaten))How to: Combine Delegates (Multicast Delegates)
EreignisseEvents