Каково практическое использование «динамической» переменной в C # 4.0? - PullRequest
13 голосов
/ 31 октября 2008

Как они используются, если при вызове метода он может не существовать?

Значит ли это, что вы сможете динамически создавать метод для динамического объекта?

Какова практическая польза от этого?

Ответы [ 5 ]

14 голосов
/ 31 октября 2008

На самом деле вы не сможете динамически создать метод - но вы можете получить реализацию IDynamicMetaObject (часто путем расширения DynamicObject) для ответа , как если бы метод существовал .

Использование:

  • Программирование для COM-объектов со слабым API (например, офис)
  • Обращение к динамическим языкам, таким как Ruby / Python
  • Потенциально создание "исследуемых" объектов - представьте запрос, подобный XPath, но с помощью вызовов метода / свойства, например, document.RootElement.Person[5].Name["Attribute"]
  • Без сомнения, еще много нам еще предстоит подумать:)
3 голосов
/ 31 октября 2008

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

По сути, это объект, свойства которого не будут известны до времени выполнения. Возможно, это происходит от COM-объекта. Возможно, это «определение на лету», как вы описываете (хотя я не думаю, что есть средства для их создания или планирования).

Это скорее похоже на System.Object, за исключением того, что вам разрешено вызывать методы, о которых не знает компилятор, и что среда выполнения выясняет, как вызывать.

1 голос
/ 21 января 2009

Думайте об этом как об упрощенной форме Отражения. Вместо этого:

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);
1 голос
/ 31 октября 2008

Две большие проблемы, о которых я могу подумать, - это утка и способность использовать C # в качестве языка сценариев в приложениях, аналогичных javascript и Python . Это последнее заставляет меня немного разорваться.

0 голосов
/ 21 января 2009

Я вижу, как пишутся несколько динамических сред ORM. Или, черт возьми, напиши сам.

Я согласен с Джоном Скитом, вы можете увидеть некоторые интересные способы исследования объектов. Может быть, с селекторами, такими как jQuery.

Вызов COM и вызов динамических языков.

Я с нетерпением жду возможности выяснить, есть ли способ сделать Ruby-подобный пропущенный метод.

...