68 votes

Double dispatch en C# ?

J'ai entendu/lu ce terme mais je ne comprends pas bien ce qu'il signifie.

Quand dois-je utiliser cette technique et comment dois-je l'utiliser ? Quelqu'un peut-il me fournir un bon exemple de code ?

0 votes

Actuellement, c'est la meilleure façon de procéder : blogs.msdn.microsoft.com/curth/2008/11/15/

0 votes

0 votes

Attention à la double expédition . Vous pouvez probablement l'éviter pour une meilleure maintenance du code.

0voto

Evsei Zholobov Points 11

Liste complète du code de travail

using System;
using System.Linq;

namespace TestConsoleApp
{
    internal class Program
    {
        public static void Main(string[] args)
        {
            const int x = 5;
            var dispatch = new DoubleDispatch();

            Console.WriteLine(dispatch.Foo<int>(x));
            Console.WriteLine(dispatch.Foo<string>(x.ToString()));

            Console.ReadLine();
        }
    }

    public class DoubleDispatch
    {
        public T Foo<T>(T arg)
        {
            var method = GetType()
                .GetMethods()
                .Single(m =>
                    m.Name == "Foo" &&
                    m.GetParameters().Length == 1 &&
                    arg.GetType().IsAssignableFrom(m.GetParameters()[0].ParameterType) &&
                    m.ReturnType == typeof(T));

            return (T) method.Invoke(this, new object[] {arg});
        }

        public int Foo(int arg)
        {
            return arg;
        }

        public string Foo(string arg)
        {
            return arg;
        }
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X