gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 03:13:25 29 4
gpt4 key购买 nike

我有一个带有静态构造函数的静态类,它需要一些时间(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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com