动态是否与Object相同

Sao*_*Ali 3 c# asp.net

在"CLR via C#"一书中提到动态关键字对应的FCL类型是System.Object.请澄清一下.

Jon*_*eet 5

从C#的角度来看,它不是一回事......但是在编译的代码中,声明为类型的变量dynamic通常(可能总是)与CLR字段或类型的局部变量相对应object.

C#编译器负责确保使用该值的任何源代码都应用了动态行为.object只是表示用于存储的编译器.它还[Dynamic]适当地应用属性,以便其他代码知道它将被动态处理.

例如,考虑一下:

public class Foo
{
    public dynamic someField;
}
Run Code Online (Sandbox Code Playgroud)

我相信将编译成IL相当于:

public class Foo
{
    [Dynamic]
    public object someField;
}
Run Code Online (Sandbox Code Playgroud)

现在,如果你写:

Foo foo = new Foo();
foo.someField = "hello";
Console.WriteLine(foo.someField.Length);
Run Code Online (Sandbox Code Playgroud)

编译器使用该属性来知道它foo.someField是动态的,因此该Length属性应该是动态绑定的.