Метод расширения динамического связывания - PullRequest
4 голосов
/ 17 апреля 2019

Пытаясь написать элегантный ответ на другой вопрос 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)

  1. Почему не динамическое связывание?
  2. Есть ли способ "принудительно" динамически связать методы расширения (без беспорядочных типов if-else s или switch ing)?
...