根据乔恩·斯基特的文章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(使用前将#替换为@)