如果在调用方法时它们可能不存在,它们的用途是什么?
这是否意味着您可以在动态对象上动态创建方法?
这有什么实际用途?
答案 0 :(得分:14)
您无法真正动态创建方法 - 但是您可以获得IDynamicMetaObject
的实现(通常通过扩展DynamicObject
)来响应,就好像方法存在一样
用途:
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。