【发布时间】:2013-02-13 17:54:20
【问题描述】:
在The C# Programming language比尔瓦格纳说:
许多人将动态绑定与类型推断混为一谈。类型 推理是静态绑定的。编译器确定类型 编译时间。例如:
var i = 5; //i is an int (Compiler performs type inference) Console.WriteLine(i); //Static binding to Console.WriteLine(int)编译器推断 i 是一个整数。变量上的所有绑定 我使用静态绑定。
现在,鉴于这些信息和我自己虚构的动态场景:
dynamic i = 5; //Compiler punts
Console.WriteLine(i);//This is now dynamically bound
我们知道类型推断是静态绑定的。这意味着动态变量无法使用类型推断来确定类型。不使用类型推断如何解析动态类型?
更新
为了尝试澄清......在运行时我们必须以某种方式找出 i 是正确的类型?因为我分配了文字5,所以运行时可以推断i 是int。那不是类型推断而不是动态绑定吗?
【问题讨论】:
-
动态的底层类型(它是一种语言结构,除了属性之外在元数据中没有表示形式)是
System.Object。它是 C# 编译器的魔力,允许您动态调用方法并访问其上的字段(在本例中为装箱的 int),而无需自己进行反射。