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);
.
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.
See more on this question at Stackoverflow