Zgodnie z artykulem Jona Skeeta C# and beforefieldinit i dyskusją w When is a static constructor called in C#? konstruktor statyczny musi zostać wywołany przed pierwszym wywołaniem metody klasy.Dlaczego konstruktor statyczny nie jest wywoływany przed pierwszym wywołaniem metody klasy
Z jakiegoś powodu następującego kodu nie wykazuje tego zachowania:
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");
}
}
}
jestem debugowania powyższy kod przy użyciu Visual Studio Debugger. Gdy instrukcja StaticClass.Equals(1,2);
zostanie wykonana w metodzie głównej, statyczny konstruktor nie zostanie wywołany, ale po wykonaniu StaticClass.foo();
wywołuje konstruktor statyczny, a następnie wywołuje metodę foo.
Jestem trochę zdezorientowany, ponieważ nie został wywołany po raz pierwszy podczas wykonywania StaticClass.Equals(1,2);
.
Uważam, że należy zastąpić Object.Equals. W obecnej wersji nazywa się wersję podstawową. Każda klasa dziedziczy po obiekcie btw, więc nie trzeba tego robić ręcznie. –
Gdzie jest zapisana twoja metoda Equals()? –
@MicrosoftDN odziedziczona po 'Object.Equals' –