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

“的实际用途是什么?”;“动态”;C#4.0中的变量?,c#,.net,c#-4.0,C#,.net,C# 4.0,如果调用该方法时,该方法可能不存在,那么它们有什么用处 这是否意味着您能够在动态对象上动态创建方法 这种方法的实际用途是什么?您实际上无法动态创建该方法-但您可以获得IDynamicMetaObject的实现(通常通过扩展dynamicbject)来响应,就好像该方法存在一样 用途: 针对具有弱API的COM对象编程(例如office) 调用Ruby/Python等动态语言 可能会生成“可探索”对象—想象一个类似XPath的查询,但通过方法/属性调用,例如document.RootElemen

如果调用该方法时,该方法可能不存在,那么它们有什么用处

这是否意味着您能够在动态对象上动态创建方法


这种方法的实际用途是什么?

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

用途:

  • 针对具有弱API的COM对象编程(例如office)
  • 调用Ruby/Python等动态语言
  • 可能会生成“可探索”对象—想象一个类似XPath的查询,但通过方法/属性调用,例如
    document.RootElement.Person[5]。Name[“Attribute”]
  • 毫无疑问,我们还有很多事情要考虑:)

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

      基本上,它是针对一个对象的,其属性在运行时之前是未知的。也许它来自一个COM对象。也许正如您所描述的那样,它是一个“动态定义对象”(尽管我认为还没有一个工具来创建这些对象或计划中的对象)


      它很像一个System.Object,只是允许您调用编译器不知道的方法,并且运行时可以确定如何调用。

      我能想到的两个大问题是duck类型和在应用程序中使用C作为脚本语言的能力,类似于javascript和Python。最后一个让我有点伤心。

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

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

      调用COM和调用动态语言


      我期待着看到是否有一种方法可以实现类似Ruby的missing_方法。

      将其视为一种简化的反射形式。与此相反:

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

      我非常喜欢XML的想法。这会涉及某种定制属性包吗?它有点像属性包,但我希望它能将LINQ包装成XML对象,并在需要时查找元素,而不是在创建时将它们全部提取出来。自从我写这篇文章以来,名字有了一点变化-我会更新…实际上,有这样一个工具,ExpandoObject。太糟糕了,这个例子不起作用。我想在我正在教的课程中使用它。对不起,上面的链接似乎无法正常工作,请从开始,然后您可以浏览整个会话以获得视频。相关帖子和