gpt4 book ai didi

c# - 为什么在将 C# 代码编译为 IL 时会创建 .ctor()?

转载 作者:可可西里 更新时间:2023-11-01 03:07:37 26 4
gpt4 key购买 nike

使用这个简单的 C# 代码,我运行 csc hello.cs; ildasm/out=hello.txt hello.exe.

class Hello
{
public static void Main()
{
System.Console.WriteLine("hi");
}
}

这是 ildasm 的 IL 代码。

.class private auto ansi beforefieldinit Hello
extends [mscorlib]System.Object
{
.method public hidebysig static void Main() cil managed
{
.entrypoint
// Code size 13 (0xd)
.maxstack 8
IL_0000: nop
IL_0001: ldstr "hi"
IL_0006: call void [mscorlib]System.Console::WriteLine(string)
IL_000b: nop
IL_000c: ret
} // end of method Hello::Main

.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
// Code size 7 (0x7)
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void [mscorlib]System.Object::.ctor()
IL_0006: ret
} // end of method Hello::.ctor

} // end of class Hello

.method public instance void .ctor()代码有什么用?它似乎没有做任何事情。

最佳答案

这是默认的无参数构造函数。你是对的;它什么都不做(除了传递给基础 Object() 构造函数,它本身也没有做任何特殊的事情)。

如果没有定义任何其他构造函数,编译器总是为非静态类创建一个默认构造函数。然后将所有成员变量初始化为默认值。这是你可以做的

new Hello();

没有遇到错误。

关于c# - 为什么在将 C# 代码编译为 IL 时会创建 .ctor()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7235585/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com