下面是一个示例类
public class Loan
{
}
现在,这些低于2线的区别是什么,它们之间有什么区别?
Loan loan = default(Loan);
Loan loan = new Loan();
是否优先使用其他?
答案 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
如果Loan
是struct
(或值类型),那么以上两者(default
和new
)都是相同的。
答案 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.