C#4.0中“动态”变量的实际用途是什么?

如果在调用方法时它们可能不存在,它们的用途是什么?

这是否意味着您可以在动态对象上动态创建方法?

这个有什么实际用处?

您实际上无法动态创建方法 – 但您可以获得IDynamicMetaObject的实现(通常通过扩展DynamicObject )来响应,就好像方法存在一样

用途:

  • 使用弱API(例如办公室)对COM对象进行编程
  • 调用Ruby / Python等动态语言
  • 潜在地制作“可探索的”对象 – 想象一个类似XPath的查询,但通过方法/属性调用,例如document.RootElement.Person[5].Name["Attribute"]
  • 毫无疑问,我们尚未想到更多:)

首先,你现在不能使用它。 它是C#4的一部分,将在未来的某个时间发布。

基本上,它是一个对象,其属性在运行时才会被人知道。 也许它来自COM对象。 也许正如你所描述的那样,它是一个“飞行物体上的定义”(虽然我认为没有设施可以创造那些尚未计划好的物体)。

它更像是一个System.Object,除了你被允许调用编译器不知道的方法,并且运行时计算出如何调用。

我能想到的两个巨头是鸭子打字和在应用程序中使用C#作为脚本语言的能力,类似于javascript和Python 。 最后一个让我泪流满面。

可以把它想象成reflection的简化forms。 而不是这个:

 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框架。 或者自己写一个。

我同意Jon Skeet的观点,你可能会看到一些探索物体的有趣方法。 也许像jQuery这样的选择器。

调用COM并调用动态语言。

我期待看到是否有办法做类似Ruby的missing_method。