c# - 如何在实际需要之前初始化 C# 静态类?

标签 c# static

我有一个带有静态构造函数的静态类,它需要一些时间(10-15 秒)来执行并完全初始化该类。为了提高性能,我决定让这个静态类显式初始化,而不是在第一次需要它时进行初始化,以便在实际需要使用时准备就绪。

我的第一个想法是为该类创建一个 Initialize() 方法,但是由于我已经有了一个静态构造函数,所以这个方法似乎不需要做任何事情,除了是方法调用以显式初始化类而不访问其任何其他公共(public)方法或属性。拥有一个不直接执行任何操作的方法对我来说似乎不合适。

然后我想我可以将代码从静态构造函数移到这个 Initialize() 方法中,但我也希望类在第一次需要时被初始化并且 Initialize() 方法未明确调用。

总而言之,我希望遵守以下标准:

  • 我想允许静态类被显式初始化(​​可能通过使用公共(public) Initialize() 方法)。
  • 我不想在不需要时访问该类的任何其他公共(public)方法或属性,即使这会初始化静态类。
  • 如果类没有被显式初始化,我仍然想在第一次需要它时初始化它(即当访问其他公共(public)方法或属性以使用它们提供的功能或数据时)。
  • 这是一个辅助类,对于我的目的而言,使用单例设计模式不是必需的。

对于用 C# 编写的静态类,遵守上述标准的正确方法是什么?这也适用于其他编程语言(例如 Java),但我个人对用 C# 编写的解决方案感兴趣。

最佳答案

我会使用初始化方法(编辑:参见 Jon 的回答)。但是如果您真的只想使用构造函数,您可以这样做:

var type = typeof (YourType);
System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(type.TypeHandle);

RunClassConstructor允许您强制类构造函数(静态构造函数)运行(如果它尚未运行)。如果它已经运行,比如说因为你使用了该类的静态成员,那么这没有任何效果。额外运行它没有效果。

关于c# - 如何在实际需要之前初始化 C# 静态类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8748492/

相关文章:

java - 拥有一个类的单个实例更好,还是拥有一堆静态方法更好?

c# - 服务器错误 "Method not found: ' 无效 System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior( bool 值 )'."

c# - String.Format 和 string.Format(以及原始数据类型的其他静态成员)之间有什么区别?

java - 这怎么是静态引用?

java - 如何使扫描仪对象成为静态

objective-c - 在 Objective-c 中使用 Static

c# - 在一列中显示类别名称的表格,在第二列中显示属于类别的项目列表,并在 ASP.NET MVC View 中的详细信息 View 上显示链接

c# - 如果多次使用,是否应该评估从 OrderBy 返回的 IEnumerable?

c# - 如何在ASP.NET MVC 2应用程序中实现向导类型的页面导航?

c# - 在常规阵列上测试 foreach 框/拆箱?