从MSDN: - “如果一个静态构造函数抛出异常,运行时就不会调用它第二次,并且该类型在您的程序运行所在的应用程序域的生命周期中将保持未初始化状态。“
你仍然使用静态构造函数进行编程构造?在这里,我试图列出在哪里和哪里不应该通过使用静态构造函数来利用CLR提供的好处。
从MSDN: - “如果一个静态构造函数抛出异常,运行时就不会调用它第二次,并且该类型在您的程序运行所在的应用程序域的生命周期中将保持未初始化状态。“
你仍然使用静态构造函数进行编程构造?在这里,我试图列出在哪里和哪里不应该通过使用静态构造函数来利用CLR提供的好处。
你仍然可以使用静态构造函数编程结构?
有时,是的 - 但仅限于小东西是惊人不太可能抛出异常......或者失败代表一个灾难性场景的应用程序是根本无法使用。
请注意,您引用的所有内容都是真实的任意静态初始化 - 不仅仅是静态构造函数。所以如果你有:
private static readonly List<int> SomeValues = new List<int> { 1, 2, 3 };
然后,仍然受到相同的限制。基本上,如果类型初始化失败,则类型不可用。这实在不应该让人吃惊,但这并不意味着它没用。
由于static constructor
被调用时,在类型是在第一次访问的精确时刻只有一次,它可能成为有用的程序在运行过程中跟踪这些信息。
它用于初始化静态变量,所以如果你有它们,你应该使用它。
看一看这另一个问题也许它甚至重复: What is the use of static constructors?
你仍然使用静态构造函数来编程构造吗?
是的。但是静态构造函数从不应该抛出一个异常,我们不应该责怪静态构造函数...
When not use static constructor
真的要花很多的初始化,我会使用一个懒惰的属性。
有时你必须使用它,如果你想以一个复杂的方式初始化静态成员。
当然,如果你写一个复杂的代码,你可能会得到一些例外,比如文件不存在,网络无法工作。但是,如果你真的知道自己在做什么,就可以做到。
所以问题不在于你是否应该使用静态构造函数,这是由于你如何设计你的软件?为什么使用具有复杂初始化需求的静态对象?如果你只想拥有一个全局唯一对象,你可以考虑Singleton模式。