Пытаясь написать элегантный ответ на другой вопрос SO Я наткнулся на странный вопрос о методах расширения.
Рассмотрим следующую настройку:
public class Foo
{
}
public static class Extensions
{
public static string ExtensionTest(this object o)
{
return "object overload called";
}
public static string ExtensionTest(this Foo f)
{
return "Foo overload called";
}
}
Когда я выполняю следующее:
object o = new Foo();
Console.WriteLine(o.ExtensionTest());
Выводит object overload called
(вместо Foo overload called
)
- Почему не динамическое связывание?
- Есть ли способ "принудительно" динамически связать методы расширения (без беспорядочных типов
if-else
s или switch
ing)?