You cannot dictate when a static constructor will be called and you can’t call it directly.
More specifically, a static constructor will be called just before you do one of the following:
- Create an instance of the type
- Access any static data in the type
- Start executing Main method (in the same class as the static constructor)
If we have the following implementation in the Dog class:
1 2 3 4 5 6 7 8 9 10 11 12 | public Dog(string name){ Console.WriteLine("Dog constructor"); Name = name;}public static string Motto = "Wag all the time";static Dog(){ Console.WriteLine("Static Dog constructor");} |
And we create a Dog instance:
1 2 3 | Console.WriteLine("Here 1");Dog d1 = new Dog("Kirby");Console.WriteLine("Here 2"); |
We get this output (static constructor called before object instantiation):

Or if we access static data:
Or if we access static data:
1 2 3 | Console.WriteLine("Here 1");string s = Dog.Motto;Console.WriteLine("Here 2"); |
The output is (static constructor called before accessing static data):


