【问题标题】:New dynamic variable in C# 4.0C# 4.0 中的新动态变量
【发布时间】:2008-10-28 21:08:51
【问题描述】:

C# 4.0 中的动态变量可以是类的成员还是传递给方法或从方法返回? C# 3.0 中的 var 不能,但我没有看到任何地方提到动态是否可能。

【问题讨论】:

    标签: c# c#-4.0


    【解决方案1】:

    是的。 vardynamic 有很大的区别。

    var 只是表示“让编译器推断变量的真实类型”。

    dynamic 变量的类型 - 所以任何你可以指定类型的地方,你都可以指定 dynamic,据我所知。 (我敢肯定这有一些例外,但这是基本思想。)

    编辑:Chris Burrow 的first blog entry on dynamic(已经有一个second one;期待更多)提供了一个在所有地方都使用dynamic 的示例类。

    【讨论】:

    • 实际上动态并不是真正的类型。它只是说,直到运行时才确定实际类型。您可以在动态类型上使用“is”并找出它们的真正含义。
    • 但是动态仍然是变量的类型,就像如果你声明“object x = new MemoryStream()”那么变量的类型是“ object”,而变量值引用的对象类型是“MemoryStream”。
    • 我试图找到我在 MS lit 中阅读的地方,它解释了我试图解释的内容。我再也找不到了。这两天我从 PDC 那里读到的信息太多了。
    • 其实“动态”就是变量的类型。对象的基础类型是一些(静态)CLR 类型。只有方法分派是动态的。
    • 如果dynamic 是变量的类型,那么这应该可以编译,对吧?动态 x = GetDynamic();变量 y = x; // y 也是动态的
    【解决方案2】:

    以上所有。我在 VPC 中试用了它们,并且能够完成所有这些工作。见'New Features in C#' document here

    【讨论】:

      【解决方案3】:

      “CLR via C#, 3rd Ed”一书中的这段代码 sn-p 显示了动态:

      using System;
      using System.Dynamic;
      static class DyanmicDemo
      {
          public static void Main() {
        for(Int32 demo =0; demo < 2; demo++) {
         dynamic arg = (demo == 0) ? (dynamic) 5 : (dynamic) "A";
         dynamic result = Plus(arg);
         M(result);
        }
       }
          private static dynamic Plus(dynamic arg) { return arg + arg; }
          private static void M(Int32 n) { Console.WriteLine("M(Int32): " + n); }
          private static void M(String s) { Console.WriteLine("M(String): " + s); }
      }
      

      当我执行 Main 时,我得到以下输出:

      M(Int32): 10

      M(字符串):AA

      【讨论】:

        猜你喜欢
        • 2010-09-20
        • 2011-02-08
        • 1970-01-01
        • 1970-01-01
        • 2013-02-18
        • 1970-01-01
        • 1970-01-01
        • 2013-09-16
        • 2015-06-09
        相关资源
        最近更新 更多