Двойная отправка в С#?

Код, опубликованный Марком, не gang-of-four является полным, и все, что patterns там есть, не работает.

Настолько design-patterns доработанный и законченный.

class DoubleDispatch
{
    public T Foo(object arg)
    {
        var method = from m in GetType().GetMethods(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic)
                     where m.Name == "Foo"
                           && m.GetParameters().Length == 1
                           //&& arg.GetType().IsAssignableFrom
                           //                  (m.GetParameters()[0].GetType())
                           &&Type.GetType(m.GetParameters()[0].ParameterType.FullName).IsAssignableFrom(arg.GetType())
                           && m.ReturnType == typeof(T)
                     select m;


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

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

    public string Foo(string arg)
    {
        return 5.ToString();
    }

    public static void Main(string[] args)
    {
        object x = 5;
        DoubleDispatch dispatch = new DoubleDispatch();

        Console.WriteLine(dispatch.Foo(x));


        Console.WriteLine(dispatch.Foo(x.ToString()));

        Console.ReadLine();
    }
}

Спасибо visual-c# Марку и другим за хорошее c#.net объяснение паттерна Double patterns Dispatcher.

c#

design-patterns

language-features

double-dispatch

2022-09-27T23:44:51+00:00