Given a static class with an initializer method:
public static class Foo
{
// Class members...
internal static init()
{
// Do some initialization...
}
}
How can I ensure the initializer is run before Main()
?
The best I can think of is to add this to Foo
:
private class Initializer
{
private static bool isDone = false;
public Initializer()
{
if (!isDone)
{
init();
isDone = true;
}
}
}
private static readonly Initializer initializer = new Initializer();
Will this work or are there some unforeseen caveats? And is there any better way of doing this?
Simply do the initialization inside a static constructor for
Foo
.From the documentation:
There are static constructors in C# that you can use.
Move your code from an
internal static
method to astatic
constructor like this:This way you are quite sure that the static constructor will be run on first mention of your
Foo
class, whether is a construction of an instance or access to a static member.