Двойная отправка в С#?
Код, опубликованный Марком, не 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
2021-12-03T22:32:37+00:00
2022-09-27T23:44:51+00:00
Hacksore
Вопросы с похожей тематикой, как у вопроса:
Двойная отправка в С#?
Предупреждение о файлах Cookies
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.