Delegates en C#

Dans le monde de la programmation objet orientée, on a souvent la réquisition d’exécuter un codage qui est défini dans une autre place, ou dont on ne connait pas exactement son contenu. Dans un tel cas, .NET offre la possibilité d’utiliser un Delegate.

C# Delegates peuvent être comparé avec des pointers vers une fonctionne dans le langage de programmation C ou C++. C’est-à-dire, un Delegate est une variable type de référence, qui comporte une référence à une méthode. Cette référence peut être changée pendant le runtime.

Normalement on utilise les Delegates pour implémenter des events ou des call-back methods.

namespace Delegates
{
    delegate void MyDelegate(string a); 

    class Program
    {
        static void Main(string[] args)
        {
            MyDelegate d = new MyDelegate(A);
        }

        static void A(string a)
        {
            // ... string action
        }
    }
}

Voici un exemple concrète pour un delegate simple :

namespace Delegates
{
    delegate void MyDelegate(string a); 

    class Program
    {
        static void Main(string[] args)
        {
            MyDelegate d = new MyDelegate(A);
            d("Caribou");

            Console.ReadKey();
        }

        static void A(string a)
        {
            Console.WriteLine(a);
        }
    }
}

Après on a assigné une méthode à un delegate, on peut facilement appeler cette méthode. Avec le delegate type de Action<T>, on peut appeler des méthodes sans return value et qui comportent jusqu’à 16 paramètres – no return value :

namespace Delegates
{
    class Program
    {
        static void Main(string[] args)
        {
            var d = new Action<int, string>(A);
            d(3, "Caribou");

            Console.ReadKey();
        }

        static void A(int a, string b)
        {
            Console.WriteLine("J'ai vu {0} {1}", a, b);
        }
    }
}

Si un return value est nécessaire, on utilise le delegate generic type de Func<T>, avec lequel on peut utiliser jusqu’à 16 paramètres plus un return value – return value:

namespace Delegates
{
    class Program
    {
        static void Main(string[] args)
        {
            var d = new Func<int, int, string>(A);
            Console.WriteLine(d(3,2));

            Console.ReadKey();
        }

        static string A(int a, int b)
        {
            string res = "J'ai vu " + (a + b) + " ours";

            return res;
        }
    }
}c

Une autre caractéristique vraiment utile d’un delegate c’est la possibilité d’en enchaîner. Donc, avec l’aide du operator += on peut montrer sur plusieurs méthodes à la fois.

delegate void MyDelegate(int a);

namespace Delegates
{
    class Program
    {
        static void Main(string[] args)
        {
            MyDelegate d1 = A;
            MyDelegate d2 = C;

            d1 += B;
            d1 += d2;

            d1(34);

            Console.ReadKey();
        }

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

        static void B(int b)
        {
            Console.WriteLine(b * 4);
        }

        static void C(int c)
        {
            Console.WriteLine(c * 6);
        }
    }
}

Les delegates sont souvent utilisés avec les events en C# et ils sont dérivés de la classe System.Delegate.

Une réflexion au sujet de « Delegates en C# »

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *