Sumit Rayakwar
Sumit Rayakwar

Reputation: 175

Why static constructor not called before first call to class method

According to Jon Skeet's artice C# and beforefieldinit and discussion in When is a static constructor called in C#? static constructor must be called before first call to a method of the class.

For some reason following code does not exhibit this behavior:

namespace AbstractAndStatic
{
    class Program
    {
        static void Main(string[] args)
        {
            StaticClass.Equals(1,2);
            StaticClass.foo();
        }
    }
    static class StaticClass : Object
    {
        public static void foo()
        {
            Console.WriteLine("Static");
        }
         static StaticClass()
        {
            Console.WriteLine("static constructor");
        }
    }
    class TestClass
    {
        public void deb()
        {
            Console.WriteLine("Test Class Debug");
        }
    }
}     

I am debugging the above code using the Visual Studio Debugger. When the statement StaticClass.Equals(1,2); gets executed in the Main method the static Constructor is not getting called but when StaticClass.foo(); is executed it calls static constructor and then call the foo method.

I am little confused as why it didn't get called the the first time when executing StaticClass.Equals(1,2);.

Upvotes: 8

Views: 2371

Answers (2)

Sunil Kumar
Sunil Kumar

Reputation: 111

The execution of a static constructor is triggered by the first of the following events to occur :

An instance of the class is created. Any of the static members of the class are referenced.

Upvotes: 0

Jon Skeet
Jon Skeet

Reputation: 1500065

Your call to StaticClass.Equals is actually just a call to Object.Equals(Object, Object), as StaticClass doesn't provide an applicable overload for Equals. If you look in the IL, you'll see that the compiler has resolved the call to just Object.Equals(1, 2). If you're not calling a method which actually involves the static class, it doesn't need to be initialized.

Upvotes: 15

Related Questions