Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否动态与对象相同_C#_Asp.net - Fatal编程技术网

C# 是否动态与对象相同

C# 是否动态与对象相同,c#,asp.net,C#,Asp.net,在“CLR via C#”一书中提到,与FCL类型对应的动态关键字是System.Object。请澄清这一点。来自: 该类型是静态类型,但动态类型的对象会绕过静态类型检查。在大多数情况下,它的功能就像它有类型对象一样 : 在大多数情况下,类型动态的行为与类型对象类似。但是,编译器不会解析或检查包含dynamic类型表达式的操作。编译器将有关操作的信息打包在一起,这些信息稍后用于在运行时评估操作。作为该过程的一部分,动态类型的变量被编译成object类型的变量。因此,类型dynamic只在编译时存

在“CLR via C#”一书中提到,与FCL类型对应的动态关键字是System.Object。请澄清这一点。

来自:

该类型是静态类型,但动态类型的对象会绕过静态类型检查。在大多数情况下,它的功能就像它有类型对象一样

:

在大多数情况下,类型动态的行为与类型对象类似。但是,编译器不会解析或检查包含dynamic类型表达式的操作。编译器将有关操作的信息打包在一起,这些信息稍后用于在运行时评估操作。作为该过程的一部分,动态类型的变量被编译成object类型的变量。因此,类型dynamic只在编译时存在,而不在运行时存在

(强调矿山)

由于
动态
引用需要能够采用任何类型,因此它对类型
对象
(或至少对所有外观和使用)有效,但编译器不会对其执行某些类型检查。

从C#的角度看,这根本不是一回事。。。但是在编译的代码中,声明为type
dynamic
的变量通常(可能总是)与类型为
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
属性