Я слушаю разговор о 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 был поставлен, который является, почему он формулируется в будущем времени.
От "Новые возможности в C# 4" документ в формате Word :
Динамический поиск не будет в состоянии найти дополнительные методы. Применяются ли дополнительные методы, или не зависит от статического контекста вызова (т.е. какие пункты использования происходят), и эта контекстная информация в настоящее время не сохраняется как часть полезной нагрузки.
Это не может работать, Дополнительная работа методов в зависимости от включения пространства имен в файле и, насколько я знаю, MSIL понятия не имеет о файлах и включая пространства имен.
Это работает, что мне кажется интересным по крайней мере ...
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