是初始化CLR值的构造函数

本文关键字:构造函数 CLR 初始化 | 更新日期: 2023-09-27 17:53:08

见下面的代码

我的问题是:我没有初始化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();
     }
}

是初始化CLR值的构造函数

. net中的所有值和对象都有默认值。如果没有显式赋值,则使用默认值。

  • 对于对象,默认值为null
  • 对于值类型,默认值为0(或与0对应的值,如Guid.Emtpy)

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

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

是的。

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

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

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

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

值数据类型的默认值: