dyl*_*ert 28 c# arrays member default-value
我实例化一个这样的数组:
int array[] = new int[4];
Run Code Online (Sandbox Code Playgroud)
这四个成员的默认值是什么?它是null,0还是不存在?
Jon*_*eet 50
它是0.它不能为null,因为null不是有效值int.
从C#5规范的第7.6.10.4节:
新数组实例的所有元素都初始化为其默认值(第5.2节).
从第5.2节开始:
变量的默认值取决于变量的类型,并确定如下:
- 对于value-type的变量,默认值与value-type的默认构造函数(第4.1.2节)计算的值相同.
- 对于reference-type的变量,默认值为null.
初始化为默认值通常通过让内存管理器或垃圾收集器在分配使用之前将内存初始化为所有位为零来完成.因此,使用all-bits-zero来表示空引用是很方便的.
(作为一个实现细节,第一个要点周围有一些棘手的问题.虽然C#本身不允许你为值类型声明一个无参数构造函数,但你可以为IL中的值类型创建自己的无参数构造函数.我不相信这些构造函数在数组初始化中调用,但它们将new X()在C#中的表达式中调用.但它确实超出了C#规范的范围.)
Eri*_*ert 16
类型的自动初始化变量的默认值(T例如数组元素或实例字段)与值的默认值相同default(T).对于引用类型和指针类型,它为null.对于数字类型,它是该类型的零.对于布尔来说,这是错误的.对于struct类型,struct值将其所有字段初始化为其默认值.