2011-12-21 120 views

回答

3

是的,绝对。这由C#规范保证,第10.12节。我试图找到一个更讲解线程的位,因为该部分只保证它会被执行一次。

请注意,如果您有一种“递归初始化”设置,您仍然可以在完全初始化之前在类中执行代码 - 并且如果两个静态构造函数相互依赖,那么您最终可能如果每个类都在不同的线程中初始化,会导致死锁。

另请注意,存在一个空的静态构造函数会影响静态字段初始值设定项的计时 - 如果您没有静态构造函数,那么当该字段可能被初始化时,CLR会有更多的余地。 (实际行为随着时间的推移发生了变化,但始终在规范范围内。)有关静态字段初始值设定项的更多信息,请参见规范的第10.5.5.1节。

基本上,保持静态构造函数尽可能简单和自包含。