默认构造函数做什么?

时间:2019-01-16 10:19:35

标签: c# constructor

在下面的代码中,

谁在分配变量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代码中是什么意思

1 个答案:

答案 0 :(得分:2)

基础。文档中的所有内容-相当早。

  

在上面的代码中,输出为0,谁为其分配了值?

.NET中的变量都被初始化为0,以避免由于早期使用内存地址而重复使用内存片段。

  

为什么我在代码中未编写任何内容时会创建默认构造函数

因为它是创建的DEFAULT构造函数,所以没有指定构造函数。也许对“默认”一词有混淆?如果所有对象都有构造函数,这将变得更加容易,尤其是当我将您的对象子类化然后调用它时;)