为什么在第一次调用class方法之前没有调用静态构造函数
根据Jon Skeet的artice C#和beforefieldinit和在When中的讨论是一个在C#中调用的静态构造函数? 必须在首次调用类的方法之前调用静态构造函数。
由于某些原因,以下代码不会出现此行为:
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"); } } }
我正在使用Visual Studio调试器调试上面的代码。 当语句StaticClass.Equals(1,2);
在Main方法中执行静态构造函数未被调用但是当StaticClass.foo();
执行它调用静态构造函数,然后调用foo方法。
我很困惑为什么它在第一次执行StaticClass.Equals(1,2);
时没有被调用StaticClass.Equals(1,2);
。
您对StaticClass.Equals
的调用实际上只是对Object.Equals(Object, Object)
的调用,因为StaticClass
不为Equals
提供适用的重载。 如果查看IL,您将看到编译器已经解析了对Object.Equals(1, 2)
的调用。 如果您没有调用实际涉及静态类的方法,则不需要初始化它。