1

可能重复:
静态构造函数有什么用?

来自 MSDN: - “如果静态构造函数引发异常,运行时将不会再次调用它,并且该类型将在程序运行的应用程序域的生命周期内保持未初始化。”

您还会使用静态构造函数进行编程构造吗?在这里,我试图列出不应该通过使用静态构造函数来利用 CLR 提供的好处的场景。

4

5 回答 5

4

您还会使用静态构造函数进行编程构造吗?

有时,是的 - 但仅适用于极不可能引发异常的小事情......或者失败代表应用程序根本无法使用的灾难场景。

请注意,您引用的所有内容都适用于任何静态初始化 - 不仅仅是静态构造函数。因此,如果您有:

private static readonly List<int> SomeValues = new List<int> { 1, 2, 3 };

那么这仍然受到相同的限制。从根本上说,如果类型初始化失败,您的类型将无法使用。这真的不足为奇,并不意味着它没有用。

于 2012-07-16T08:00:10.417 回答
0

您还会使用静态构造函数进行编程构造吗?

是的。但是静态构造函数永远不应该抛出异常,我们不应该责怪静态构造函数......

When not use static constructor

真正花费很多的初始化,我会改用惰性属性。

于 2012-07-16T08:04:07.200 回答
0

由于在第一次访问类型的精确时刻static constructor仅调用一次,因此在程序运行时跟踪该信息可能会变得有用。

于 2012-07-16T07:58:50.740 回答
0

它用于初始化静态变量,所以如果你有它们,你可能应该使用它。

看看这个另一个问题,它甚至可能是重复 的:静态构造函数有什么用?

于 2012-07-16T07:59:57.343 回答
0

如果您想以稍微复杂的方式初始化静态成员,有时您必须使用它。

当然,如果您编写复杂的代码,您可能会遇到一些异常,例如文件不存在,网络无法正常工作。但是,如果你真的知道你在做什么,你就可以做到。

所以问题不在于你是否应该使用静态构造函数,而在于你如何设计你的软件?为什么要使用具有复杂初始化需求的静态对象?如果你只想拥有一个全局唯一的对象,你可以考虑单例模式。

于 2012-07-16T08:13:05.440 回答