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デバッガを使用して上記のコードをデバッグしています。文StaticClass.Equals(1,2);
がMainメソッドで実行されると、静的コンストラクタは呼び出されませんが、StaticClass.foo();
が実行されると、静的コンストラクタが呼び出され、fooメソッドが呼び出されます。
StaticClass.Equals(1,2);
を実行したときになぜ初めて呼び出されなかったのかと少し混乱しています。 StaticClass
がEquals
に適用可能な過負荷を提供しないよう
私はあなたがObject.Equalsをオーバーライドする必要があると信じています。それが現れて、それはベースバージョンを呼んでいます。すべてのクラスはオブジェクトbtwを継承しているため、手動で行う必要はありません。 –
あなたのEquals()メソッドはどこに書かれていますか? –
@MicrosoftDNが 'Object.Equals'から継承されました –