C# Language Combiner des délégués (délégués à la multidiffusion)


Exemple

Addition + et soustraction - opérations peuvent être utilisées pour combiner des instances de délégué. Le délégué contient une liste des délégués assignés.

using System;
using System.Reflection;
using System.Reflection.Emit;

namespace DelegatesExample {
    class MainClass {
        private delegate void MyDelegate(int a);

        private static void PrintInt(int a) {
            Console.WriteLine(a);
        }

        private static void PrintType<T>(T a) {
            Console.WriteLine(a.GetType());
        }

        public static void Main (string[] args)
        {
            MyDelegate d1 = PrintInt;
            MyDelegate d2 = PrintType;

            // Output:
            // 1
            d1(1);

            // Output:
            // System.Int32
            d2(1);

            MyDelegate d3 = d1 + d2;
            // Output:
            // 1
            // System.Int32
            d3(1);

            MyDelegate d4 = d3 - d2;
            // Output:
            // 1
            d4(1);

            // Output:
            // True
            Console.WriteLine(d1 == d4);
        }
    }
}

Dans cet exemple, d3 est une combinaison de délégués d1 et d2 . Par conséquent, lorsqu'il est appelé, le programme System.Int32 chaînes 1 et System.Int32 .


Combinaison de délégués avec des types de retour non vides :

Si un délégué multidiffusion a un type de retour non nonvoid , l'appelant reçoit la valeur de retour de la dernière méthode à appeler. Les méthodes précédentes sont toujours appelées, mais leurs valeurs de retour sont ignorées.

    class Program
    {
        public delegate int Transformer(int x);

        static void Main(string[] args)
        {
            Transformer t = Square;
            t += Cube;
            Console.WriteLine(t(2));  // O/P 8 
        }

        static int Square(int x) { return x * x; }

        static int Cube(int x) { return x*x*x; }
    }

t(2) appellera d'abord Square puis Cube . La valeur de retour de Square est ignorée et la valeur renvoyée de la dernière méthode, c.-à-d. Cube est conservé.