10
A
回答
13
这通过调用默认创建的类型A
的新实例,无参数的构造函数:
A a = new A();
这为A
类型的默认值分配给变量a
,并且不调用任何构造的所有:
A a = default(A);
的主要区别在于,一个类型的默认值是null
为参照的文ce类型和所有值类型的零位值(因此default(int)
将是0
,default(bool)
将是false
等)。
0
新关键字始终表示引用类型的内存分配。实际上没有其他构造会为您即将创建的数据在内存中创建空间。对于值类型,它们的内存在函数或过程中使用时总是预先分配的。 default
关键字允许泛型类型返回其默认(未初始化)值,或者null
作为参考类型。
2
对于值类型,没有区别,因为值类型的默认构造函数总是等于默认值(T)。它只是用0
,null
,0.0
...填充所有内容。在.net的默认实现中,这只对应于用二进制零填充变量中的所有内容。
对于引用类型new T()
调用默认构造函数并返回(通常)非空引用。
default(T)
在这种情况下相当于null
。
default(T)
很重要,因为它表示T的有效值,而不管T是参考类型还是值类型。这在通用编程中非常有用。
例如,在函数FirstOrDefault
中,如果可枚举项没有条目,则需要一个有效的结果值。而你只是使用default(T)
,因为它是唯一适用于每种类型的东西。
另外调用引用类型的默认构造函数需要一个通用约束。并不是每个引用类型都实现一个默认的构造函数。所以你不能总是使用它。
相关问题
- 1. 构造函数和默认构造函数的区别
- 2. 默认的默认构造函数,为什么不是用户提供的默认构造函数?
- 3. 默认(用户定义的)构造函数和构造函数与默认参数之间的区别?
- 4. 默认构造函数和无参数构造函数的区别?
- 5. 类默认构造函数
- 6. 默认构造函数
- 7. 非默认构造函数
- 8. C++,默认构造函数
- 9. constexpr默认构造函数
- 10. 非默认构造函数
- 11. C++默认构造函数和默认参数
- 12. 默认和参数化构造函数
- 13. 混合默认和非默认的构造函数
- 14. 是否有默认的默认构造函数?
- 15. 没有默认构造函数的默认值
- 16. 默认参数默认构造
- 17. Java默认构造函数问题 - 实际上构成“默认构造函数”的是什么?
- 18. 默认构造函数C++头和cpp
- 19. 静态和默认构造函数
- 20. QGIS:QgsVectorLayer和QgsRasterLayer的默认构造函数?
- 21. DatabaseManager没有默认构造函数
- 22. 没有默认构造函数发现
- 23. “RavenReader.Web.Controllers.UserController”没有默认的构造函数
- 24. System.Configuration.Cast没有默认的构造函数
- 25. @Delegate类没有默认构造函数
- 26. 没有默认的构造函数
- 27. 成员没有默认构造函数
- 28. 没有默认构造函数 - 继承
- 29. 默认构造
- 30. =没有参数的默认和空构造函数之间的区别?
@Fermaref - 不知道你在哪里。声明`var x = default(TestClass);`将`null`赋给`x` – 2010-11-28 02:06:40
没问题,我发现我的错误。我尝试使用它的时候向它提供了一个类型值参数,而不是类型名称,这只适用于泛型。对不起。 – Femaref 2010-11-28 09:42:00