【发布时间】:2012-03-09 06:55:11
【问题描述】:
我不相信生成的代码会在每次访问静态成员(包括函数)时检查类是否已初始化。我相信检查每一次访问都是低效的。我查看了 ECMA 334 中的 §17.11,它说
静态构造函数的执行由第一个触发 在应用程序域中发生以下事件:
- 创建了一个类的实例。
- 类的任何静态成员都被引用。
似乎没有定义如何确定“第一次”发生的时间。我想不出任何办法,只能每次检查。怎么可能?
【问题讨论】:
-
相关,对于静态情况:csharpindepth.com/Articles/General/Beforefieldinit.aspx - 这很重要
-
不就是第一次调用后将函数指针设置到不同位置的问题吗?一开始它指向类加载器或其他什么,然后指向函数的主体......
-
@Marc:这讨论了在允许第一次访问静态成员之前调用静态构造函数时,而不是如何检测第一次访问。
-
@Ben - k;改写。不过,任何对这个领域感兴趣的人仍然可以从这篇文章中受益 - 所以把链接留在那里
-
我认为“...由以下第一个触发...”是说如果这些事件中的任何一个发生,则调用静态构造函数。该文本可以更简洁 - 我认为它有点模棱两可。
标签: c# .net static-constructor