题
什么是他们的使用,如果当你打电话的方法,它可能不存在吗?
这是不是意味着你将能够动态地创建一个方法上的动态对象?
有什么实际使用这个吗?
解决方案
你不会真的能够动态地创建方法的-但你可以得到一个执行情况 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。
不隶属于 StackOverflow