Будет динамическое ключевое слово в C#4 поддерживать дополнительные методы?

Я слушаю разговор о C#4 dynamic ключевое слово и я задаемся вопросом... Эта функция будет ортогональной к другим функциям.NET, например, она будет поддерживать дополнительные методы?

public static class StrExtension {
    public static string twice(this string str) { return str + str; }
}
...
dynamic x = "Yo";
x.twice(); // will this work?

Примечание: Этот вопрос задали, прежде чем C#4 был поставлен, который является, почему он формулируется в будущем времени.

43
задан Motti 19 February 2013 в 15:41
поделиться

3 ответа

От "Новые возможности в C# 4" документ в формате Word :

Динамический поиск не будет в состоянии найти дополнительные методы. Применяются ли дополнительные методы, или не зависит от статического контекста вызова (т.е. какие пункты использования происходят), и эта контекстная информация в настоящее время не сохраняется как часть полезной нагрузки.

47
ответ дан Jon Skeet 26 November 2019 в 23:05
поделиться

Это не может работать, Дополнительная работа методов в зависимости от включения пространства имен в файле и, насколько я знаю, MSIL понятия не имеет о файлах и включая пространства имен.

2
ответ дан Olmo 26 November 2019 в 23:05
поделиться

Это работает, что мне кажется интересным по крайней мере ...

public static class StrExtension
{
   public static string twice(this string str) { return str + str; }
}

...
dynamic x = "Yo";
StrExtension.twice(x);

Тем не менее, если компилятор может найти правильный метод расширения во время компиляции, тогда я не понимаю, почему он не может упаковать создать набор методов расширения для поиска во время выполнения? Это было бы похоже на v-таблицу для методов, не являющихся членами.

РЕДАКТИРОВАТЬ:

Это круто ... http://www2.research.att.com/~bs/multimethods.pdf

4
ответ дан 26 November 2019 в 23:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: