Virtuelle und abstrakte statische Methoden in C#
Bei der Arbeit mit Anbietern stellt sich die Frage, ob abstrakte Klassen abstrakte statische Methoden haben können. Um dieses Konzept zu verstehen, ist eine klare Erklärung erforderlich.
Warum statische Methoden nicht instanziiert werden
Statische Methoden werden nicht direkt instanziiert; Sie sind zugänglich, ohne dass eine Objektreferenz erforderlich ist. Sie werden über den Klassennamen und nicht über eine Objektinstanz aufgerufen.
Auswirkungen nicht virtueller statischer Aufrufe
Im Intermediate Language (IL)-Code werden statische Methodenaufrufe durchgeführt Verwenden des Klassennamens, der die Methode definiert hat, nicht des Klassennamens des verweisenden Objekts. Zum Beispiel:
public class A { public static void Test() { } } public class B : A { } class Program { static void Main(string[] args) { B.Test(); } }
Der IL-Code für die Main-Methode lautet:
.entrypoint .maxstack 8 L0000: nop L0001: call void ConsoleApplication1.A::Test() L0006: nop L0007: ret
Beachten Sie, dass der Aufruf an A.Test und nicht an B.Test erfolgt, obwohl B. Der Test wird im C#-Code aufgerufen.
Virtualitätseinschränkungen bei Static Methoden
Virtuelle Methoden, einschließlich abstrakter Methoden, sind nützlich beim Umgang mit Variablen, die zur Laufzeit auf verschiedene Objekttypen verweisen können. Bei statischen Methoden ist die Zielmethode zur Kompilierungszeit bekannt, da über den Klassennamen auf sie zugegriffen wird. Dadurch entfällt die Notwendigkeit einer Virtualisierung.
Daher werden virtuelle/abstrakte statische Methoden in C# nicht unterstützt. Dies liegt daran, dass statische Methodenaufrufe nicht virtuell sind und die Zielmethode zur Kompilierungszeit bestimmt wird, wodurch eine Virtualisierung nicht erforderlich ist.
Das obige ist der detaillierte Inhalt vonKönnen abstrakte Klassen in C# statische Methoden haben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!