Каково практическое использование "динамической" переменной в С# 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.