以下是一个示例类:
public class Loan
{
}
现在,下面这两行代码有什么区别?它们之间的差异是什么?
Loan loan = default(Loan);
Loan loan = new Loan();
有偏好使用其中的一个吗?
以下是一个示例类:
public class Loan
{
}
现在,下面这两行代码有什么区别?它们之间的差异是什么?
Loan loan = default(Loan);
Loan loan = new Loan();
有偏好使用其中的一个吗?
default
用于将值清零。对于引用类型,这意味着null
。对于值类型而言,这等效于使用没有参数的new
。对于泛型,default
非常实用。
new
创建该类型的一个实例,调用构造函数。
在您的示例中,如果我执行:
Loan loan = default(Loan);
或在较新版本的C#中:
Loan loan = default;
等价于
Loan loan = null;
如果您不构造它,将会得到一个空引用异常:
loan.MakePayment(100); // Throws
原始答案 - 自 C# 10 起不再正确。
对于值类型(即结构体),default(T)
和 new T()
实际上是相同的:它们都返回一个未初始化的 T
实例。然而,对于引用类型,default(T)
返回 null
,而 new T()
返回一个使用默认构造函数初始化的新的 T
实例。
在你的代码中,Loan
是一个类,所以 default(Loan)
返回 null。
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
)将会是相同的。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,对于数值型则返回0,结构体将返回每个成员初始化为零或null,具体取决于它们是值类型还是引用类型。对于可空值类型,default返回一个System.Nullable,其初始化方式与任何结构相同。
在C#中,new关键字可用作运算符、修饰符或约束。
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.
loan==null
怎么样? - L.B