【发布时间】:2014-08-27 13:20:49
【问题描述】:
假设我有以下课程:
class Dummy
{
public static Dictionary<int, int> dict = new Dictionary<int, int>(); // (1)
static Dummy() // (2)
{
dict.Add(1, 100);
dict.Add(2, 200);
}
}
此类型将由多个线程访问。 (1) 和 (2) 什么时候执行?它们会为每个线程执行吗?会不会出现key重复异常?
【问题讨论】:
-
参见:stackoverflow.com/a/7105/1336590 - “静态构造函数保证每个应用程序域只运行一次”。还有:msdn.microsoft.com/library/aa645612.aspx
-
并不是说我认为它会改变线程安全的任何事情(我认为这不是问题),但如果你愿意,你可以写
public static Dictionary<int, int> dict = new Dictionary<int, int> { { 1, 100 }, { 2, 200 }, };。那么你就不需要手动编写静态构造函数了。 (仍然会生成一个静态构造函数,所以我猜线程问题不会因此而受到影响,所以这只是你觉得哪个代码更有吸引力的问题。)
标签: c#