C# 其中是根据代码⇒创建的引用;IL或IL⇒;本机代码

C# 其中是根据代码⇒创建的引用;IL或IL⇒;本机代码,c#,constructor,reference,C#,Constructor,Reference,我正在努力寻找对象的引用将在何处创建,以及在哪个阶段创建,从程序到中间代码,或者从中间代码到本机代码,对象实际上是在运行时创建的,您的代码只是创建它的指令,编译代码时,代码将编译为IL 然后运行时(JIT编译器)将把这段代码解释为本机代码,无论如何,这并不是真正创建对象。当CPU执行解释后的代码并在内存中存储一些值时,将创建对象及其引用。: 通常,针对.NET Framework的应用程序被编译为中间语言(IL)。在运行时,即时(JIT)编译器将IL转换为本机代码。相反,.NET Native将

我正在努力寻找对象的引用将在何处创建,以及在哪个阶段创建,从程序到中间代码,或者从中间代码到本机代码,对象实际上是在运行时创建的,您的代码只是创建它的指令,编译代码时,代码将编译为IL

然后运行时(JIT编译器)将把这段代码解释为本机代码,无论如何,这并不是真正创建对象。当CPU执行解释后的代码并在内存中存储一些值时,将创建对象及其引用。

:

通常,针对.NET Framework的应用程序被编译为中间语言(IL)。在运行时,即时(JIT)编译器将IL转换为本机代码。相反,.NET Native将Windows应用程序直接编译为本机代码

因此,正如您所看到的,IL甚至不是一个先决条件,它可以完全省略(尽管在大多数情况下,它不应该)

:

运行时自动处理对象布局并管理对对象的引用,在不再使用对象时释放它们。以这种方式管理其生存期的对象称为托管数据。垃圾收集消除了内存泄漏以及其他一些常见的编程错误


因此,由于执行的代码在运行之前会转换为本机代码,并且创建了对象,因此我认为这回答了您的问题。

当您编译代码时,您会得到IL。不再有程序代码了。对象的引用将在什么阶段创建
MyClass MyClass=new MyClass()
。我看不到对象引用中的引用仅在程序运行时有效(内存中的物理地址)。因此,您只能在将调试器附加到活动进程时看到它的信息,而不能在ILDASM或ILSpy等工具中静态地看到它的信息。