5

我正在和一个朋友辩论,他说静态构造函数可以让位于竞争条件,因为静态构造函数可以被多次调用。似乎这只能发生在大容量多线程环境中。这甚至可能吗?

我找不到任何文件来证明他错了。有人对此有任何见解吗?

谢谢!

4

2 回答 2

13

这甚至可能吗?

不会。CLR 会为您处理这个问题,并防止静态构造函数被多次调用。

这在 C# 语言规范中多次说明。例如,第 3.1 节规定:

每个应用程序域最多运行一次类型的静态构造函数。

于 2012-04-10T21:35:18.527 回答
4

每个 AppDomain 只调用一次静态构造函数。
ECMA-335 规定 CLI 应保证:

“对于任何给定的类型,类型初始化程序应只执行一次,除非用户代码显式调用。”

而且我还没有听说过在 C# 中调用类型初始值设定项的便捷方法。

如果您在类型初始化程序之间创建循环依赖关系,您只会遇到问题。
有关该问题的有趣文章,请参见此处:
https ://msmvps.com/blogs/jon_skeet/archive/2012/04/07/type-in​​itializer-circular-dependencies.aspx )

于 2012-04-10T21:37:21.867 回答