[英]How can I run a static initializer method in C# before the Main() method?
给定一个带有初始化方法的静态类:
public static class Foo
{
// Class members...
internal static init()
{
// Do some initialization...
}
}
如何确保初始化程序在Main()
之前运行?
我能想到的最好的方法是将其添加到Foo
:
private class Initializer
{
private static bool isDone = false;
public Initializer()
{
if (!isDone)
{
init();
isDone = true;
}
}
}
private static readonly Initializer initializer = new Initializer();
这会起作用还是有一些不可预见的警告? 有没有更好的方法来做到这一点?
您可以使用 C# 中的静态构造函数。
public static class Foo
{
// Class members...
static Foo(){
init();
// other stuff
}
internal static init()
{
// Do some initialization...
}
}
将您的代码从internal static
方法移动到static
构造函数,如下所示:
public static class Foo
{
// Class members...
static Foo()
{
// Do some initialization...
}
}
这样,您就非常确定静态构造函数将在第一次提到您的Foo
类时运行,无论是实例的构造还是对静态成员的访问。
将初始化代码放在类的静态构造函数中
static Foo()
{
// Initialization code
}
这个构造函数在第一次访问类时运行。
您可以在使用类之前使用RunClassConstructor
来触发类的静态构造函数。 例如,如果这个类在 IOC 容器或类似的东西中注册自己,这会很有用。
RuntimeHelpers.RunClassConstructor(typeof(Foo).TypeHandle);
您可以在System.Runtime.CompilerServices
命名空间中找到RuntimeHelpers
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.