【发布时间】:2012-07-15 01:20:19
【问题描述】:
来自 MSDN: - “如果静态构造函数抛出异常,运行时将不会再次调用它,并且该类型将在应用程序域的生命周期内保持未初始化状态你的程序正在运行哪个。”
您还会使用静态构造函数进行编程构造吗?在这里,我试图列出不应该通过使用静态构造函数来利用 CLR 提供的好处的场景。
【问题讨论】:
标签: c# static constructor
来自 MSDN: - “如果静态构造函数抛出异常,运行时将不会再次调用它,并且该类型将在应用程序域的生命周期内保持未初始化状态你的程序正在运行哪个。”
您还会使用静态构造函数进行编程构造吗?在这里,我试图列出不应该通过使用静态构造函数来利用 CLR 提供的好处的场景。
【问题讨论】:
标签: c# static constructor
你还会使用静态构造函数来编程构造吗?
有时,是的 - 但仅适用于那些惊人地不太可能引发异常的小事情......或者失败代表应用程序根本无法使用的灾难性场景。
请注意,您在此处引用的所有内容都适用于 any 静态初始化 - 而不仅仅是静态构造函数。所以如果你有:
private static readonly List<int> SomeValues = new List<int> { 1, 2, 3 };
那么这仍然受到相同的限制。从根本上说,如果类型初始化失败,您的类型将无法使用。这真的不足为奇,并不意味着它没用。
【讨论】:
由于static constructor 仅在第一次访问 type 的精确时刻被调用一次,因此在程序期间跟踪该信息可能会变得有用运行。
【讨论】:
它用于初始化静态变量,所以如果你有的话,你应该使用它。
看看这个其他问题,也许它甚至是重复的: What is the use of static constructors?
【讨论】:
你还会使用静态构造函数来编程构造吗?
是的。但是静态构造函数永远不应该抛出异常,我们不应该责怪静态构造函数......
When not use static constructor
真正花费很多的初始化,我会改用惰性属性。
【讨论】:
如果您想以稍微复杂的方式初始化静态成员,有时您必须使用它。
当然,如果您编写复杂的代码,您可能会遇到一些异常,例如文件不存在,网络无法正常工作。但是,如果您真的知道自己在做什么,就可以做到。
所以问题不在于你是否应该使用静态构造函数,而在于你如何设计你的软件?为什么要使用具有复杂初始化需求的静态对象?如果你只想拥有一个全局唯一的对象,你可以考虑单例模式。
【讨论】: