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

时间:2008-10-31 13:28:34

标签: c# .net c#-4.0

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

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

这有什么实际用途?

5 个答案:

答案 0 :(得分:14)

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

用途:

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

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:1)

我能想到的两个大问题是鸭子打字和在应用程序中使用C#作为脚本语言的能力,类似于javascript和Python 。最后一个让我有点撕裂。

答案 3 :(得分:1)

将其视为反思的简化形式。而不是:

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

答案 4 :(得分:0)

我看到正在编写几个动态ORM框架。或者自己写一个。

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

调用COM并调用动态语言。

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