什么是他们的使用,如果当你打电话的方法,它可能不存在吗?

这是不是意味着你将能够动态地创建一个方法上的动态对象?

有什么实际使用这个吗?

有帮助吗?

解决方案

你不会真的能够动态地创建方法的-但你可以得到一个执行情况 IDynamicMetaObject (往往通过的延伸 DynamicObject)的回应 如果该方法存在.

使用:

  • 编程对COM对象弱API(例如办公室)
  • 调入动态的语言,例如红宝石/蟒蛇
  • 潜在的"探索"的对象-想象一下,一个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框架。或者自己写一个。

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

调用COM并调用动态语言。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top