代码之家  ›  专栏  ›  技术社区  ›  Maxime Rouiller

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

  •  13
  • Maxime Rouiller  · 技术社区  · 16 年前

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

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

    这有什么实际用途?

    5 回复  |  直到 13 年前
        1
  •  16
  •   Jon Skeet    16 年前

    您将无法真正动态地创建该方法,但您可以得到 IDynamicMetaObject (通常通过扩展 DynamicObject )回应 好像这个方法存在似的 .

    使用:

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

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

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

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

        3
  •  1
  •   user1228 user1228    16 年前

    我能想到的两件大事是鸭子打字和 在应用程序中使用C#作为脚本语言的能力,类似于javascript和Python . 最后一个让我有点伤心。

        4
  •  1
  •   Adam Ruth    16 年前

    把它看作是一种简化的反射形式。与此相反:

    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);
    
        5
  •  0
  •   BuddyJoe    16 年前

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

    我同意Jon Skeet的观点,你可能会看到一些探索物体的有趣方式。

    调用COM和调用动态语言。

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