C# 是否动态与对象相同
在“CLR via C#”一书中提到,与FCL类型对应的动态关键字是System.Object。请澄清这一点。来自: 该类型是静态类型,但动态类型的对象会绕过静态类型检查。在大多数情况下,它的功能就像它有类型对象一样 : 在大多数情况下,类型动态的行为与类型对象类似。但是,编译器不会解析或检查包含dynamic类型表达式的操作。编译器将有关操作的信息打包在一起,这些信息稍后用于在运行时评估操作。作为该过程的一部分,动态类型的变量被编译成object类型的变量。因此,类型dynamic只在编译时存在,而不在运行时存在 (强调矿山) 由于C# 是否动态与对象相同,c#,asp.net,C#,Asp.net,在“CLR via C#”一书中提到,与FCL类型对应的动态关键字是System.Object。请澄清这一点。来自: 该类型是静态类型,但动态类型的对象会绕过静态类型检查。在大多数情况下,它的功能就像它有类型对象一样 : 在大多数情况下,类型动态的行为与类型对象类似。但是,编译器不会解析或检查包含dynamic类型表达式的操作。编译器将有关操作的信息打包在一起,这些信息稍后用于在运行时评估操作。作为该过程的一部分,动态类型的变量被编译成object类型的变量。因此,类型dynamic只在编译时存
动态
引用需要能够采用任何类型,因此它对类型对象
(或至少对所有外观和使用)有效,但编译器不会对其执行某些类型检查。从C#的角度看,这根本不是一回事。。。但是在编译的代码中,声明为typedynamic
的变量通常(可能总是)与类型为object
的CLR字段或局部变量相对应
C#编译器负责确保任何使用该值的源代码都应用了动态行为<代码>对象只是表示用于存储的编译器。它还将在适当的地方应用该属性,以便其他代码知道它将被动态处理
例如,考虑这一点:
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
属性