我想知道什么时候静态变量(在一个类)进入图片(初始化)?它是在第一次调用实例构造函数之后还是在类加载之后调用? 何时发生类加载?静态变量何时在C#中初始化?
回答
哦,那很复杂。这取决于是否设置了beforefieldinit
标志,这反过来(在C#中)取决于是否存在静态构造函数。更糟的是;在.NET 4 我相信的行为改变,使它比以前更“懒”。
坦率地说,我不会在这里编码到任何特定的行为;简单地说:只要您使用常规代码来访问静态字段,就会在您尝试使用静态字段之前对其进行初始化。
+1“我不会代码到任何特定行为“,明智的建议 – smirkingman 2010-10-19 07:43:43
”常规代码“涵盖什么? – 2014-04-30 03:52:24
@DaviddCeFreitas“不反射的东西”(和其他作弊) – 2014-04-30 06:42:19
它可能取决于编程语言和环境,但通常静态变量是在类加载时初始化的。
静态变量一个很好的写了进入画面对应的类加载后。 它不是在构造函数调用之后,因为构造函数调用在我们使用new运算符创建类的对象时发挥作用,并且静态变量在类级别上不在对象级别上可用。
- 1. 静态变量初始化
- 2. 静态变量初始化
- 3. 初始化静态变量
- 4. 静态变量初始化
- 5. C++是静态变量初始化= atomic?
- 6. 静态成员变量初始化C++
- 7. 在C99中使用静态变量初始化静态变量
- 8. 如何在JavaScript静态类中初始化静态变量?
- 9. 如何让静态变量初始化
- 10. 初始化静态final变量声明与初始化在Application.OnCreate()
- 11. php初始化静态变量与其他静态变量
- 12. 初始化自身静态变量的
- 13. 初始化最终静态变量
- 14. 静态变量初始化顺序
- 15. 静态变量未初始化
- 16. 静态成员变量初始化
- 17. 静态只读变量初始化
- 18. 初始化静态最终变量
- 19. 静态变量初始化 - 澄清
- 20. PHP的静态变量初始化
- 21. 静态变量重新初始化
- 22. 静态变量未初始化
- 23. 静态变量的初始化顺序
- 24. 初始化后可以初始化静态变量吗?
- 25. 初始化静态向量
- 26. 静态初始化C++
- 27. 静态块VS中的静态变量初始化顺序
- 28. 如何在C++中初始化类中的非静态常量变量?
- 29. 在C++中初始化静态成员
- 30. C++ - 如何初始化成员函数内的静态变量?
这是在几个问题中讨论的,包括[静态字段初始化如何在C#中工作? (http://stackoverflow.com/questions/710793/how-does-static-field-initialization-work-in-c)和[什么是C#中的静态变量初始化顺序? (http://stackoverflow.com/questions/1405709/what-is-the-static-variable-initialization-order-in-c)。 – 2010-10-19 07:09:43
@Matthew - 很好的链接,但是对于CLI 4,它们可能是错的 - 或者说:不完整; [看到这里](http://msmvps.com/blogs/jon_skeet/archive/2010/01/26/type-initialization-changes-in-net-4-0.aspx) – 2010-10-19 07:13:43