构造函数是初始化值还是CLR?

时间:2014-03-25 06:55:34

标签: c# .net constructor clr

请参阅下面的代码

我的问题是:我没有初始化eIdeName的默认值,但仍然会将属性初始化为默认值。

CLR会这样做吗?

class Employee
{
    int _empId;
    String _eName;
    public Employee()
    {
        // I am not initializing the attributes here
    }
    public void Disp()
    {
        Console.WriteLine("Id:: {0}  Name:: {1}", _empId, _eName);
    }
}

class Program
{
     static void Main(string[] args)
     {
        new Employee().Disp();
     }
}

3 个答案:

答案 0 :(得分:5)

.NET中的所有值和对象都具有默认值。如果未指定显式值,则将使用默认值。

  • 对于对象,默认值为null
  • 对于值类型,default value is 0(或对应于0的内容,如Guid.Emtpy

由于您没有使用值初始化字段,因此它们会获得默认值。

答案 1 :(得分:4)

  

我没有初始化eIdeName的默认值,但仍然会将字段初始化为默认值。 CLR会这样做吗?

是。

对于类,内存分配器在执行构造函数之前将内存清零。

对于结构体,运行时从短期存储中分配空白结构,将对临时变量的引用作为this传递给构造函数,然后将值复制到最终目标。但请注意,在某些情况下,编译器和运行时可以确定可以省略复制步骤,而不会在程序中引入语义更改。

答案 2 :(得分:0)

在类定义中设置的类成员变量在构造函数之前使用默认值设置。如果需要,可以轻松地在构造函数中重置默认值。类的构造函数是必需的。如果没有为类创建任何构造函数,编译器将自动创建无参数构造函数。自动创建的构造函数不会初始化类成员变量。

.NET有两种数据类型(值类型和引用类型)。在内部,这两种数据类型具有自己的默认值。 (大多数引用类型的默认值为null)。在您的程序中,您使用了int和字符串数据类型。 Int有' 0'作为默认值和字符串有' Null'作为默认值。如果您没有初始化变量,它将自动采用默认值并处理它。

值数据类型的默认值:Default Values Table