来自MSDN: - "如果静态构造函数抛出异常,运行时将不会再次调用它,并且该类型将在该生命周期内保持未初始化状态。您的程序正在运行的应用程序域。"
您是否仍会使用Static Constructors进行编程构造?在这里,我试图列出场景,在哪里和哪里没有人应该利用CLR通过使用静态构造器提供的好处。
答案 0 :(得分:4)
您是否仍会使用Static Constructors进行编程构造?
有时,是的 - 但仅限于错误地不可能抛出异常的小事情......或者故障代表了应用程序根本无法使用的灾难性场景。
请注意,您在那里引用的所有内容都适用于任何静态初始化 - 而不仅仅是静态构造函数。所以如果你有:
private static readonly List<int> SomeValues = new List<int> { 1, 2, 3 };
那时仍然受到同样的限制。从根本上说,如果类型初始化失败,则您的类型不可用。这真的不应该让人感到惊讶,并不意味着它没用。
答案 1 :(得分:0)
由于static constructor
在第一次访问 type 的精确时刻仅调用一次,因此跟踪该信息可能会很有用在程序运行时。
答案 2 :(得分:0)
它用于初始化静态变量,所以如果你有它们,你应该使用它。
看看这个其他问题,也许它甚至是重复的: What is the use of static constructors?
答案 3 :(得分:0)
您是否仍会使用Static Constructors进行编程构造?
是。但是静态构造函数永远不应该抛出异常,我们不应该责怪静态构造函数......
When not use static constructor
真正花费很多的初始化,我会使用惰性属性。
答案 4 :(得分:0)
如果您想以一种复杂的方式初始化静态成员,有时您必须使用它。
当然,如果你编写一个复杂的代码,你可能会遇到一些异常,例如文件不存在,网络无法正常工作。但是,如果你真的知道自己在做什么,就可以做到。
所以问题不在于你是否应该使用静态构造函数,这是由于你如何设计你的软件?为什么使用具有复杂init需求的静态对象?如果您只想拥有全局唯一对象,可以考虑使用Singleton模式。