Каково практическое применение “динамической” переменной в C # 4.0?

StackOverflow https://stackoverflow.com/questions/253460

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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);

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top