为什么在第一次调用类方法之前不调用静态构造函数

2024-06-18

根据乔恩·斯基特的文章C# 和 beforefieldinit http://csharpindepth.com/Articles/General/Beforefieldinit.aspx和讨论C# 中何时调用静态构造函数? https://stackoverflow.com/questions/1437352/when-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 调试器调试上述代码。当声明StaticClass.Equals(1,2);在 Main 方法中执行,静态构造函数不会被调用,但是当StaticClass.foo();执行时它会调用静态构造函数,然后调用 foo 方法。

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


您致电StaticClass.Equals is actually只需致电Object.Equals(Object, Object) https://msdn.microsoft.com/en-us/library/w4hkze5k(v=vs.110).aspx, as StaticClass不提供适用的重载Equals。如果您查看 IL,您将看到编译器已将调用解析为Object.Equals(1, 2)。如果您没有调用实际涉及静态类的方法,则不需要对其进行初始化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在第一次调用类方法之前不调用静态构造函数 的相关文章

随机推荐