从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属性应该是动态绑定的.