Каково практическое использование "динамической" переменной в С# 4.0?
Каково их использование, если при вызове метода он может не существовать?
Означает ли это, что вы сможете динамически создавать метод для динамического объекта?
Каково практическое использование этого?
Ответы
Ответ 1
Вы не сможете динамически создавать метод, но вы можете получить реализацию IDynamicMetaObject
(часто, расширяя DynamicObject
), чтобы реагировать так, как если бы существовал этот метод.
Применение:
- Программирование объектов COM со слабым API (например, офис)
- Вызов динамических языков, таких как Ruby/Python
- Потенциально создавая "исследуемые" объекты - представьте XPath-подобный запрос, но через вызовы метода/свойств, например.
document.RootElement.Person[5].Name["Attribute"]
- Несомненно, еще много мы еще не подумали:)
Ответ 2
Прежде всего, вы не можете использовать его сейчас. Это часть С# 4, которая будет выпущена в будущем.
В принципе, это для объекта, свойства которого не будут известны до выполнения. Возможно, это происходит из COM-объекта. Возможно, это "определить на лету объект", как вы описали (хотя я не думаю, что там есть средство для создания тех или еще запланированных).
Это скорее похоже на System.Object, за исключением того, что вам разрешено вызывать методы, о которых компилятор не знает, и что среда выполнения вычисляет способ вызова.
Ответ 3
Два монета, о которых я могу думать, - это утка и возможность использовать С# в качестве языка сценариев в приложениях, похожих на javascript и Python. Это последнее заставляет меня немного порвать.
Ответ 4
Подумайте об этом как о упрощенной форме отражения. Вместо этого:
object value = GetSomeObject();
Method method = value.GetType().GetMethod("DoSomething");
method.Invoke(value, new object[] { 1, 2, 3 });
Вы получаете следующее:
IDynamicObject value = GetSomeObject();
value.DoSomething(1, 2, 3);
Ответ 5
Я вижу несколько динамических структур ORM, которые записываются. Или просто напишите сами.
Я согласен с Джоном Скитом, вы можете увидеть интересные способы изучения объектов.
Возможно, с селекторами, такими как jQuery.
Вызов COM и вызов динамических языков.
Я с нетерпением жду, если есть способ сделать Ruby-like missing_method.