【发布时间】:2012-01-05 19:25:37
【问题描述】:
我有一个带有静态构造函数的静态类,它需要一些时间(10-15 秒)来执行和完全初始化该类。为了提高性能,我决定让这个静态类显式初始化,而不是在第一次需要时初始化,以便在实际需要使用时准备好使用。
我的第一个想法是为该类创建一个Initialize() 方法,但由于我已经有一个静态构造函数,所以这个方法似乎不需要做任何事情,除了作为显式初始化类的调用方法无需访问其任何其他公共方法或属性。有一个不直接做任何事情的方法对我来说似乎不合适。
然后我想我可以将代码从静态构造函数移动到这个 Initialize() 方法中,但我也希望在第一次需要时初始化该类并且 Initialize() 方法没有被显式调用.
总而言之,我希望遵守以下标准:
- 我希望允许显式初始化静态类(可能通过使用公共
Initialize()方法)。 - 我不想在不需要时访问类上的任何其他公共方法或属性,即使这会初始化静态类。
- 如果类没有被显式初始化,我仍然想在第一次需要它时初始化它(即,当访问其他公共方法或属性以使用它们提供的功能或数据时)。
- 这是一个辅助类,我不需要使用单例设计模式。
对于用 C# 编写的静态类,遵守上述标准的正确方法是什么?这也适用于其他编程语言(例如 Java),但我个人对用 C# 编写的解决方案感兴趣。
【问题讨论】:
-
为什么不在静态构造函数中初始化类呢?我发现您不需要手动初始化。
-
不是“可初始化”的静态类不是静态类吗?这种行为的目的是什么?您似乎想根据静态值实例化一个类。
-
@Jeremy Holovacs:初始化静态类是指初始化它的所有静态成员。该类用作辅助类,我不需要维护它的实际实例。
-
@Ramhound,请指点我如何制作一个空静态类...在我看来,这在术语上是矛盾的。