我喜欢上课:
class foo
{
public foo(string Text)
{
}
}
运行此代码以创建类的实例obj1
设置为null
:
foo obj1 = default(foo);
通过打击代码一切正常:
foo obj2= new foo("bla bla");
我有2个问题:
default(foo);
时,默认承包商会发生什么?foo obj1 = default(foo);
等于foo obj1 = null
?提前致谢。
答案 0 :(得分:5)
以下是default
的工作原理:
返回
null
引用类型和zero
表示数值类型。对于structs
,它会 将struct
初始化为zero
或null
的每个成员依赖 关于它们是价值还是参考类型。对于nullable
值 types,default返回一个System.Nullable<T>
,它被初始化为 任何struct
。
new
运算符只是创建类的新实例并初始化属性/字段,因为它是在构造函数中编写的。
用于创建对象并调用构造函数。
答案 1 :(得分:2)
根据documentation,默认将变量设置为其默认值。这意味着可空类型将设置为null,数字类型设置为0。
答案 2 :(得分:1)
它不会调用构造函数只使用默认值进行初始化。 请记住,它也与int,double和structs等值类型相关。 另一个用例是默认的泛型类型。 每种类型都有一个预定的默认值,该值在https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/default-values-table
指定答案 3 :(得分:1)
本质上,default(T)只保留保存引用所需的最小内存,或类型的实例,它不会调用任何构造函数。
int
和bool
这样的原始类型,返回的值分别为0
或false
。null
,即使它们通常不能null
因为构造函数!值字段将具有默认设置(0
,false
等)。