C#静态类如何在实际需要之前初始化?我有一个带有静态构造函数的静态类,它需要一些时间(10-15秒)来执行和完全初始化该类。为了提高性能,我决定显式地初始化这个静态类,而不是在第一次需要它的时候,这样它就可以在真正需要的时候使用。我的第一个想法是为该类创建一个Initialize()方法,但是由于我已经有了一个静态构造函数,所以这个方法似乎不需要做任何事情,除了调用来显式初始化该类而不访问任何其他东西.其他公共方法或属性。有一个不直接做任何事情的方法对我来说似乎不合适。然后我想我可以将代码从静态构造函数移到这个Initialize()方法中,但我还希望在第一次需要时初始化该类,并且不显式调用Initialize()方法。总而言之,我想遵守以下标准:用C#编写的静态类遵守上述标准的正确方法是什么?这也适用于其他编程语言(例如Java),但我个人对用C#编写的解决方案感兴趣。我可能只是选择Initialize方法-它可以做一些有用的事情:我会选择Initialize方法(编辑:参见Jon的回答)。但是如果你真的只想使用构造函数,你可以这样做:vartype=typeof(YourType);System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(type.TypeHandle);RunClassConstructor允许您强制类构造函数(静态构造函数)运行(如果它尚未运行)。如果它已经在运行,比如因为您使用了该类的静态成员,那么这没有任何效果。再次运行它没有效果。我不确定您是否可以指定何时加载静态构造函数。来自MSDN“在创建第一个实例或引用任何静态成员之前,自动调用静态构造函数来初始化类。”http://msdn.microsoft.com/en-us/library/k9x6w0hc(v=vs.80).aspx*编辑:*添加单例模式会有帮助吗?getter可以通过检查类中的标志IsLoaded=true来调用Initialize()。后续调用将不会调用Initialize()两种解决方法:将构造函数代码移至Initialize()以便可以显式调用它。并且构造函数中的代码被替换为仅调用Initialize()方法,以防在显式调用之前动态加载静态类publicstaticclassStaticClass{//实际构造函数staticStaticClass(){Initialize();}//显式“构造函数”publicstaticvoidInitialize(){MyProperty="SomeValue";}publicstaticstringMyProperty{get;放;如果你愿意,那么初始化如下:StaticClass.Initialize();或者它会在第一个使用动态初始化在语义上不是那么原始,但是你可以通过使用属性并将它们扔到临时变量中来触发静态类的有机初始化。所以这样做://触发静态初始化vardummy=StaticClass.MyProperty;仍将允许您在需要时调用它,但如果在初始化时有一些性能成本,您可以尝试在启动时调用它,而不是在用户第一次执行触发标记的操作时调用它。有关静态初始化的另一个有用概述,请参阅:C#中静态类初始化的顺序是否确定?这种方法对我来说似乎不太好。我可能会将该方法命名为Touch(),给它一个空主体,并添加适当的注释。这足以让你觉得有些地方不对劲吗?以上是C#学习教程:如何在C#静态类真正需要之前初始化它?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
