【发布时间】:2010-09-20 04:30:54
【问题描述】:
如果你调用方法时它可能不存在,它们有什么用?
这是否意味着您可以在动态对象上动态创建方法?
这个有什么实际用途?
【问题讨论】:
-
抱歉,上面的链接似乎无法正常工作,请从microsoftpdc.com 开始,您可以浏览会话以访问视频。
如果你调用方法时它可能不存在,它们有什么用?
这是否意味着您可以在动态对象上动态创建方法?
这个有什么实际用途?
【问题讨论】:
您实际上无法动态创建该方法 - 但您可以获得IDynamicMetaObject 的实现(通常通过扩展DynamicObject)来响应就好像该方法存在。
用途:
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。
【讨论】: