默认构造函数和默认构造函数之间的区别是什么

时间:2010-11-28 01:51:25

标签: c# constructor

我有一个名为A的班级。这两个陈述有什么区别?

A a = new A();

A a = default(A);

3 个答案:

答案 0 :(得分:13)

这通过调用默认的无参数构造函数来创建类型A的新实例:

A a = new A();

这会将类型A的默认值分配给变量a,并且根本不会调用任何构造函数:

A a = default(A);

主要区别在于类型的默认值对于引用类型是null,对于所有值类型都是零位值(因此default(int)将是0,{{ 1}}将是default(bool)等等。

答案 1 :(得分:2)

对于值类型没有区别,因为值类型的默认构造函数始终等于default(T)。它只是用0null0.0来填充所有内容...在.net的默认实现中,这只对应于用二进制零填充变量中的所有内容。

对于引用类型new T(),调用默认构造函数并返回(通常)非空引用 另一方面,default(T)在这种情况下相当于null

default(T)很重要,因为它代表T的有效值,无论T是引用值还是值类型。这在通用编程中非常有用 例如,在FirstOrDefault之类的函数中,在可枚举没有条目的情况下,您需要一个有效的结果值。你只需使用default(T),因为它是唯一对每种类型都有效的东西。

另外,在reference-types上调用默认构造函数需要通用约束。并非每个引用类型都实现默认构造函数。所以你不能总是使用它。

答案 2 :(得分:0)

new关键字始终表示引用类型的内存分配。没有其他构造实际上为您要创建的数据在内存中创建空间。对于值类型,在函数或过程中使用时,它们的内存始终是预分配的。 default关键字允许泛型类型返回其默认(未初始化)值,或null作为引用类型。