请参阅下面的代码
我的问题是:我没有初始化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();
}
}
答案 0 :(得分:5)
.NET中的所有值和对象都具有默认值。如果未指定显式值,则将使用默认值。
null
Guid.Emtpy
)由于您没有使用值初始化字段,因此它们会获得默认值。
答案 1 :(得分:4)
我没有初始化
eId
和eName
的默认值,但仍然会将字段初始化为默认值。 CLR会这样做吗?
是。
对于类,内存分配器在执行构造函数之前将内存清零。
对于结构体,运行时从短期存储中分配空白结构,将对临时变量的引用作为this
传递给构造函数,然后将值复制到最终目标。但请注意,在某些情况下,编译器和运行时可以确定可以省略复制步骤,而不会在程序中引入语义更改。
答案 2 :(得分:0)
在类定义中设置的类成员变量在构造函数之前使用默认值设置。如果需要,可以轻松地在构造函数中重置默认值。类的构造函数是必需的。如果没有为类创建任何构造函数,编译器将自动创建无参数构造函数。自动创建的构造函数不会初始化类成员变量。
.NET有两种数据类型(值类型和引用类型)。在内部,这两种数据类型具有自己的默认值。 (大多数引用类型的默认值为null)。在您的程序中,您使用了int和字符串数据类型。 Int有' 0'作为默认值和字符串有' Null'作为默认值。如果您没有初始化变量,它将自动采用默认值并处理它。
值数据类型的默认值:Default Values Table