关键字default和new之间有什么区别

时间:2014-06-17 17:44:37

标签: c#

下面是一个示例类

public class Loan
{
}

现在,这些低于2线的区别是什么,它们之间有什么区别?

Loan loan = default(Loan);
Loan loan = new Loan();

是否优先使用其他?

4 个答案:

答案 0 :(得分:8)

default用于清零值。对于参考类型,那是null。对于值类型,这与使用不带任何参数的new实际上相同。 default非常适合仿制药。

new创建该类型的实例,调用构造函数。

在你的例子中,如果我这样做:

Loan loan = default(Loan);

或更新版本的C#:

Loan loan = default;

在逻辑上等同于

Loan loan = null;

如果不构造它,您将获得空引用异常:

loan.MakePayment(100); // Throws

答案 1 :(得分:2)

对于值类型(即结构),default(T)new T()实际上是相同的:它们都返回未初始化的T实例。但是,对于引用类型,default(T)会返回null,而new T()会返回T的新实例,并使用默认构造函数进行初始化。

在您的代码中,Loan是一个类,因此default(Loan)返回null。

答案 2 :(得分:2)

default会为值类型返回default值,为参考类型返回null

如果您的Load是一个类,第一行将返回null,而第二行将返回Loan的新实例

Loan loan = default(Loan); // null if Loan is a reference type
Loan loan = new Loan(); // new instance of Loan - Not Null

如果Loanstruct (或值类型),那么以上两者(defaultnew)都是相同的。

答案 3 :(得分:1)

在泛型类和方法中,出现的一个问题是,如果您事先不知道以下内容,如何为参数化类型T指定默认值:

Whether T will be a reference type or a value type.

If T is a value type, whether it will be a numeric value or a struct.

给定参数化类型T的变量t,语句t = null仅在T是引用类型时有效,并且t = 0仅适用于数值类型但不适用于结构。解决方案是使用default关键字,它将为引用类型返回null,为数值类型返回零。对于结构体,它将返回初始化为struct或null的结构的每个成员,具体取决于它们是值还是引用类型。对于可空值类型,default返回一个System.Nullable,它像任何struct一样初始化。

在C#中,new关键字可用作运算符,修饰符或约束。

新运营商

Used to create objects and invoke constructors.

新修饰符

Used to hide an inherited member from a base class member.

新约束

Used to restrict types that might be used as arguments for a type parameter in a generic declaration.