Каково их использование, если при вызове метода он может не существовать?
Означает ли это, что вы сможете динамически создавать метод для динамического объекта?
Каково практическое использование этого?
Каково их использование, если при вызове метода он может не существовать?
Означает ли это, что вы сможете динамически создавать метод для динамического объекта?
Каково практическое использование этого?
Вы не сможете динамически создавать метод, но вы можете получить реализацию IDynamicMetaObject
(часто, расширяя DynamicObject
), чтобы реагировать так, как если бы существовал этот метод.
Применение:
document.RootElement.Person[5].Name["Attribute"]
Прежде всего, вы не можете использовать его сейчас. Это часть С# 4, которая будет выпущена в будущем.
В принципе, это для объекта, свойства которого не будут известны до выполнения. Возможно, это происходит из COM-объекта. Возможно, это "определить на лету объект", как вы описали (хотя я не думаю, что там есть средство для создания тех или еще запланированных).
Это скорее похоже на System.Object, за исключением того, что вам разрешено вызывать методы, о которых компилятор не знает, и что среда выполнения вычисляет способ вызова.
Два монета, о которых я могу думать, - это утка и возможность использовать С# в качестве языка сценариев в приложениях, похожих на 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-like missing_method.