是初始化CLR值的构造函数
本文关键字:构造函数 CLR 初始化 | 更新日期: 2023-09-27 17:53:08
见下面的代码
我的问题是:我没有初始化eId
和eName
的默认值,但仍然将属性初始化为默认值。
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();
}
}
. net中的所有值和对象都有默认值。如果没有显式赋值,则使用默认值。
- 对于对象,默认值为
null
- 对于值类型,默认值为0(或与0对应的值,如
Guid.Emtpy
)
由于您没有用值初始化您的字段,因此它们获得默认值
我没有初始化
eId
和eName
的默认值,但仍然将字段初始化为默认值。CLR正在这样做吗?
是的。
对于类,内存分配器在执行构造函数之前将内存归零。
对于结构体,运行时从短期存储中分配一个空白结构体,将构造函数的临时变量引用作为this
传递给它,然后将该值复制到最终目的地。但是请注意,在某些情况下,编译器和运行时可以确定可以省略复制步骤,而无需在程序中引入语义更改。
在类定义中设置的类成员变量在构造函数之前使用默认值设置。如果需要,可以在构造函数中轻松地重置默认值。构造函数对于类是强制的。如果没有为类创建任何构造函数,编译器将自动创建无参数构造函数。自动创建的构造函数不会初始化类成员变量。
。NET有两种数据类型(值类型和引用类型)。在内部,这两种数据类型都有自己的默认值。(大多数引用类型的默认值为null)。在您的程序中,您使用了int和string数据类型。Int的默认值是'0',string的默认值是'Null'。如果您没有初始化变量,它将自动获取默认值并处理它。
值数据类型的默认值: