Délégués avec méthodes nommées et méthodes anonymes (Guide de programmation C#)

Un délégué peut être associé à une méthode nommée. Lorsque vous instanciez un délégué à l'aide d'une méthode nommée, la méthode est passée en paramètre, par exemple :

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

C'est ce que l'on appelle utiliser une méthode nommée. Les délégués construits avec une méthode nommée peuvent encapsuler une méthode statique ou une méthode d'instance. Les méthodes nommées sont la seule méthode pour instancier un délégué dans les versions précédentes de C#. Toutefois, dans une situation où la création d'une nouvelle méthode constitue une charge de travail non souhaitée, C# vous permet d'instancier un délégué et de spécifier immédiatement un bloc de code que le délégué traitera lorsqu'il sera appelé. Le bloc peut contenir une expression lambda ou une méthode anonyme. Pour plus d'informations, consultez Fonctions anonymes (Guide de programmation C#).

Notes

La méthode que vous passez en tant que paramètre de délégué doit avoir la même signature que la déclaration du délégué.

Une instance de délégué encapsule soit une méthode statique soit une méthode d'instance.

Même si le délégué peut utiliser un paramètre de sortie, nous ne recommandons pas son utilisation avec les délégués d'événement multicast, car vous ne pouvez pas savoir quel délégué sera appelé.

Exemple 1

L'exemple suivant est un exemple simple de déclaration et d'utilisation d'un délégué. Notez que le délégué, Del, et la méthode associée, MultiplyNumbers, ont la même 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
*/

Exemple 2

Dans l'exemple suivant, un délégué est associé à une méthode statique et à une méthode d'instance, et ces méthodes retournent chacune des informations spécifiques.

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

Voir aussi

Tâches

Comment : combiner des délégués (délégués multicast) (Guide de programmation C#)

Référence

Délégués (guide de programmation C#)

Méthodes anonymes (Guide de programmation C#)

Événements (Guide de programmation C#)

Concepts

Guide de programmation C#