为什么在第一次调用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)
的调用。 如果您没有调用实际涉及静态类的方法,则不需要初始化它。
上述就是C#学习教程:为什么在第一次调用class方法之前没有调用静态构造函数分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1003321.html