C# の仮想静的メソッドと抽象静的メソッド
プロバイダーを使用する場合、抽象クラスが抽象静的メソッドを持つことができるかどうかという問題が生じます。この概念を理解するには、明確な説明が必要です。
静的メソッドがインスタンス化されない理由
静的メソッドは直接インスタンス化されません。オブジェクト参照を必要とせずにアクセスできます。これらは、オブジェクト インスタンスではなく、クラス名を通じて呼び出されます。
非仮想静的呼び出しの影響
中間言語 (IL) コードでは、静的メソッド呼び出しが行われます。参照オブジェクトのクラス名ではなく、メソッドを定義したクラス名を使用します。例:
public class A { public static void Test() { } } public class B : A { } class Program { static void Main(string[] args) { B.Test(); } }
Main メソッドの IL コードは次のとおりです。
.entrypoint .maxstack 8 L0000: nop L0001: call void ConsoleApplication1.A::Test() L0006: nop L0007: ret
B であっても、呼び出しは B.Test ではなく A.Test に対して行われることに注意してください。テストは C# コードで呼び出されます。
静的による仮想性の制限メソッド
抽象メソッドを含む仮想メソッドは、実行時にさまざまなオブジェクト型を参照できる変数を扱う場合に便利です。静的メソッドの場合、ターゲット メソッドはクラス名を通じてアクセスされるため、コンパイル時にわかります。これにより、仮想化の必要がなくなります。
したがって、仮想/抽象静的メソッドは C# ではサポートされません。これは、静的メソッド呼び出しは非仮想的であり、ターゲット メソッドはコンパイル時に決定されるため、仮想化が不要になるためです。
以上がC# では抽象クラスに静的メソッドを含めることはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。