【发布时间】:2008-10-28 21:08:51
【问题描述】:
C# 4.0 中的动态变量可以是类的成员还是传递给方法或从方法返回? C# 3.0 中的 var 不能,但我没有看到任何地方提到动态是否可能。
【问题讨论】:
C# 4.0 中的动态变量可以是类的成员还是传递给方法或从方法返回? C# 3.0 中的 var 不能,但我没有看到任何地方提到动态是否可能。
【问题讨论】:
是的。 var 和 dynamic 有很大的区别。
var 只是表示“让编译器推断变量的真实类型”。
dynamic 是 变量的类型 - 所以任何你可以指定类型的地方,你都可以指定 dynamic,据我所知。 (我敢肯定这有一些例外,但这是基本思想。)
编辑:Chris Burrow 的first blog entry on dynamic(已经有一个second one;期待更多)提供了一个在所有地方都使用dynamic 的示例类。
【讨论】:
dynamic 是变量的类型,那么这应该可以编译,对吧?动态 x = GetDynamic();变量 y = x; // y 也是动态的
以上所有。我在 VPC 中试用了它们,并且能够完成所有这些工作。见'New Features in C#' document here
【讨论】:
“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
【讨论】: