【发布时间】:2019-01-16 10:19:35
【问题描述】:
在下面的代码中,谁为变量a 赋值?为什么在我没有在代码中写任何关于它的内容时创建默认构造函数(我检查了创建默认构造函数的地方的 ildasm)
创建的默认构造函数中的内容:
method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
// Code size 8 (0x8)
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void [System.Runtime]System.Object::.ctor()
IL_0006: nop
IL_0007: ret
} // end of method Program::.ctor
代码:
using System;
namespace demo
{
class Program
{
int a;
static void Main(string[] args)
{
Program obj = new Program();
Console.WriteLine(obj.a);
Console.ReadLine();
}
}
}
在上面的代码中输出为0,谁给它赋值?是创建了默认构造函数还是 CLR?
instance void [System.Runtime]System.Object::.ctor()默认构造函数的ildasm代码中这是什么意思
【问题讨论】:
-
尝试在字段初始化器中初始化a,比如
int a = 8;,看看有什么区别。 -
@kennyzx 我尝试了相同的
int a=8然后创建的默认构造函数已将值 8 分配给 a -
没有构造函数,就无法创建对象。这就是为您添加默认构造函数的原因。由于如果您忘记提供构造函数,编译器实际上有两个选项。 a) 为您提供一个。 b)不编译(并强制您手动添加一个进行编译)。 C# 选择了选项 a)。
-
so 在 ildasm 中包含对
System.Object::.ctor()的调用是用于对象创建的system.Object类的构造函数。 @mjwills
标签: c# constructor