【发布时间】:2015-12-08 03:25:11
【问题描述】:
根据 Jon Skeet 的文章C# and beforefieldinit 和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); 时第一次没有调用它。
【问题讨论】:
-
我相信你需要重写 Object.Equals。就目前而言,它正在调用基本版本。顺便说一句,每个类都继承自对象,因此无需手动进行。
-
你的 Equals() 方法写在哪里?
-
@MicrosoftDN 继承自
Object.Equals -
@RonBeyer:不,它正在调用
static Equals(Object, Object)方法。 -
@JonSkeet 在您发布之前大约 30 秒就知道了:)