Comment travailler avec des délégués en C #

Un délégué est un pointeur de fonction de type sécurisé qui peut référencer une méthode qui a la même signature que celle du délégué. Vous pouvez tirer parti des délégués en C # pour implémenter des événements et des méthodes de rappel. Un délégué de multidiffusion est celui qui peut pointer vers une ou plusieurs méthodes ayant des signatures identiques.

Comprendre les délégués en C #

En substance, un délégué contient une référence à une méthode et également à l'objet cible sur lequel la méthode doit être appelée. Les délégués en C # sont similaires aux pointeurs de fonction en C ++, mais les délégués C # sont de type sécurisé. Vous pouvez transmettre des méthodes en tant que paramètres à un délégué pour permettre au délégué de pointer vers la méthode. Les délégués sont utilisés pour définir les méthodes de rappel et implémenter la gestion des événements, et ils sont déclarés à l'aide du mot-clé «delegate». Vous pouvez déclarer un délégué qui peut apparaître seul ou même imbriqué dans une classe.

Il y a trois étapes dans l'utilisation des délégués. Ceux-ci incluent la déclaration, l'instanciation et l'invocation. 

La signature d'un délégué ressemble à ceci:

déléguer l'identificateur de type de résultat ([paramètres])

L'instruction suivante montre comment vous pouvez déclarer un délégué.

délégué public void MyDelegate (string text);

Comme vous pouvez le voir dans l'instruction ci-dessus, le nom du délégué est «MyDelegate», il a un type de retour «void» et il accepte un objet chaîne comme argument. Cela implique que le délégué MyDelegate peut pointer vers une méthode qui a une signature identique. Ceci n'est cependant qu'une déclaration - vous devez instancier un délégué avant de pouvoir l'utiliser. L'instruction donnée ci-dessous montre comment vous pouvez instancier le délégué déclaré ci-dessus.

MyDelegate d = new MyDelegate (ShowText);

Une fois que vous avez déclaré et instancié le délégué, vous pouvez appeler facilement la méthode vers laquelle le délégué pointe.

d ("Hello World ...");

Ici, d est l'instance de délégué

Vous pouvez également appeler la méthode vers laquelle pointe l'instance de délégué à l'aide de la méthode Invoke () sur l'instance de délégué, comme indiqué ci-dessous.

d.Invoke ("Hello World ...");

Si vous avez une méthode qui accepte deux nombres et que vous souhaitez les ajouter et renvoyer la somme des deux nombres, vous pouvez utiliser un délégué pour stocker la valeur de retour de la méthode comme indiqué dans l'extrait de code ci-dessous.

résultat int = d (12, 15);

Voici la liste complète des codes pour votre référence.

en utilisant le système;

Délégués d'espace de noms

{

    délégué public int MyDelegate (int x, int y);

    programme de classe

    {

      statique int Somme (int x, int y)

        {

            retourne x + y;

        }

        static void Main ()

        {

            MyDelegate d = new MyDelegate (Sum);           

            résultat int = d.Invoke (12, 15);

            Console.WriteLine (résultat);

            Console.ReadLine ();

        }

    }

Délégués en action en C #

Voici la liste complète des codes.

en utilisant le système;

Délégués d'espace de noms

{

    délégué public void MyDelegate (string text);

    programme de classe

    {

        public static void ShowText (texte de chaîne)

        {

            Console.WriteLine (texte);

        }

        static void Main ()

        {

            MyDelegate d = new MyDelegate (ShowText);

            d ("Hello World ...");

            Console.ReadLine ();

        }

    }

}

Notez que vous pouvez attribuer plusieurs objets à une instance de délégué à l'aide de l'opérateur +, qui fait du délégué un délégué de multidiffusion. Vous pouvez également combiner des instances de délégué à l'aide de la méthode statique Combine.

Le moteur d'exécution gère une liste (également appelée liste d'invocation) en interne pour exécuter plusieurs méthodes. La liste de code suivante montre comment vous pouvez utiliser la méthode Combine () pour combiner plusieurs instances de délégué.

myDelegate d1 = new myDelegate (Méthode1);

myDelegate d2 = new myDelegate (Méthode2);

myDelegate multicastDelegate = (myDelegate) Delegate.Combine (d1, d2);

multicastDelegate.Invoke ();

Un délégué qui peut pointer vers plusieurs méthodes est appelé délégué de multidiffusion. Notez que les instances de délégué sont immuables. Ainsi, lorsque vous combinez des délégués ou soustrayez une instance de délégué de la liste, une nouvelle instance de délégué est créée pour représenter la liste mise à jour ou nouvelle des cibles ou méthodes à appeler.

Délégués de multidiffusion en action en C #

La liste de codes suivante illustre un délégué de multidiffusion. Notez l'utilisation de l'instance de délégué: Ici, nous avons utilisé l'opérateur + = pour affecter le délégué à plusieurs méthodes qui ont des signatures identiques.

en utilisant le système;

Délégués d'espace de noms

{

    délégué public void MyDelegate ();

    programme de classe

    {

        public static void Méthode1 ()

        {

            Console.WriteLine ("Inside Method1 ...");

        }

        public static void Méthode2 ()

        {

            Console.WriteLine ("Inside Method2 ...");

        }

        static void Main ()

        {

            MyDelegate d = null;

            d + = Méthode 1;

            d + = Méthode2;

            d.Invoke ();

            Console.ReadLine ();

        }

    }

}

Les délégués sont parfaitement adaptés à la mise en œuvre d'une programmation événementielle. Un délégué n'a pas besoin de connaître la classe de l'objet auquel il fait référence. Tout ce qu'il faut savoir, c'est la signature de la méthode vers laquelle il pointerait. Une utilisation appropriée des délégués peut favoriser la réutilisabilité de votre code et la flexibilité de vos conceptions. Vous pouvez consulter la documentation en ligne de Microsoft pour plus d'informations sur les délégués.