在“CLR via C#”一书中提到动态关键字对应的FCL类型是System.Object。请澄清一下。
答案 0 :(得分:5)
从C#的角度来看,不是同样的东西......但是在编译的代码中,声明为类型dynamic
的变量通常(可能总是)对应于CLR字段或类型object
的本地变量。
C#编译器负责确保使用该值的任何源代码都应用了动态行为。 object
只是表示用于存储的编译器。它还适用于[Dynamic]
属性,以便其他代码知道它将被动态处理。
例如,考虑一下:
public class Foo
{
public dynamic someField;
}
我相信将编译成IL等同于:
public class Foo
{
[Dynamic]
public object someField;
}
现在如果你写:
Foo foo = new Foo();
foo.someField = "hello";
Console.WriteLine(foo.someField.Length);
编译器使用该属性知道foo.someField
是动态的,因此Length
属性应该是动态绑定的。
答案 1 :(得分:2)