为什么在第一次调用class方法之前没有调用静态构造函数

时间:2015-09-11 14:16:50

标签: c# .net

根据Jon Skeet的artice C# and beforefieldinitWhen is a static constructor called in 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 Debugger调试上面的代码。当在Main方法中执行语句StaticClass.Equals(1,2);时,不会调用静态构造函数,但是当执行StaticClass.foo();时,它会调用静态构造函数,然后调用foo方法。

我很困惑,为什么在执行StaticClass.Equals(1,2);时没有第一次调用它。

1 个答案:

答案 0 :(得分:12)

StaticClass.Equals的来电实际只是致电Object.Equals(Object, Object),因为StaticClass并未为Equals提供适用的重载}。如果您查看IL,您将看到编译器已解决了对Object.Equals(1, 2)的调用。如果您没有调用实际涉及静态类的方法,则不需要初始化。