根據Jon Skeet的artice 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調試器上面的代碼。當在Main方法中執行語句StaticClass.Equals(1,2);
時,靜態構造函數不會被調用,但當執行StaticClass.foo();
時,它會調用靜態構造函數,然後調用foo方法。
我有點困惑,爲什麼它在執行StaticClass.Equals(1,2);
時第一次沒有被調用。
我相信你需要重寫Object.Equals。就目前而言,這是調用基礎版本。每個類都從對象btw繼承,所以不需要手動完成。 –
你寫的Equals()方法在哪裏? –
@MicrosoftDN它繼承自Object.Equals' –