Warum ist der Einstiegspunkt der Hauptmethode in den meisten C# -Programmen statisch?Warum ist der Einstiegspunkt der Hauptmethode in den meisten C# -Programmen statisch?
Antwort
Um eine Instanzmethode aufzurufen, benötigen Sie eine Instanz eines Objekts. Das heißt, um Ihr Programm zu starten, müsste die CLR eine Instanz von zB Program
erstellen, um die Methode Main
aufzurufen. Daher würde der Konstruktor von Program
vor Main
laufen, was den Zweck, insgesamt einen Hauptteil zu haben, zunichte macht.
+1 Schön erklärt. –
Aber das bedeutet, dass der statische Konstruktor immer noch heißt? –
@Yuriy, ja, tut es. Es wird speziell in Abschnitt 10.11 der C# -Sprachspezifikation genannt. Ich weiß nicht genau, warum diese Entscheidung getroffen wurde (möglicherweise wurde sie aus der CLR-Ebene erzwungen). – JaredPar
Da sonst ein Objekt erstellt werden müsste, und das Ausführen des Konstruktors könnte negative Nebenwirkungen verursachen.
Wie können Sie Ihre Klasseninstanz vor der Hauptversion erstellen?
So wie Sie main anrufen. Sie nicht - die Laufzeit macht eine Menge Sachen vor dem Haupt, Laden von Klassen und Erstellen von Objekten. –
Konzeptionell haben Sie nur eine Instanz einer statischen. Und eine statische Methode passt gut zu dem Idiom eines einzelnen Startpunkts für ein Programm. Die Sprachdesigner könnten eine spezielle Programmklasse erstellt haben, die mit einer Hauptmethode verwendet werden kann, aber eine einzelne statische Funktion als Einstiegspunkt erstellen. Auf einigen Ebenen ist es wirklich nur eine Design-Wahl.
Statische Methoden können ausgeführt werden, ohne eine Instanz zu erstellen. Per Konvention haben sie die main
Methode als Standardmethode zum Aufruf.
Die .NET runtime
ruft die Main
Methode auf. (Anmerkung: Main kann auch von woanders aufgerufen werden, beispielsweise vom Code Main() in einer anderen Methode von ExampleClass.) Das Schlüsselwort static
macht die Methode ohne eine von ExampleClass
zugänglich. Die Main-Methode ist also ein Einstiegspunkt und muss als statisch deklariert werden.
Andernfalls würde das Programm eine Instanz erfordern, aber jede Instanz würde erfordert ein Programm.
Zu diesem unlösbaren circular dependency
Haupt als Einstiegspunkt vermeiden
Referenz: http://en.wikipedia.org/wiki/C_Sharp_(programming_language
ich die Frage umdrehen würde. Was ist der zwingende Vorteil der Implementierung der Funktion, die Main zu einer Instanzmethode macht? Features sind teuer; Wenn es keinen zwingenden Vorteil gibt, werden sie nicht implementiert.
Haben Sie einen wirklich guten Grund, warum Main eine Instanzmethode sein sollte?
für jede Objekte einer Klasse enthält Hauptmethode und andere Methoden und Variablen, gibt es separate Kopien jeder Variable und Methoden von allen Objekten enthalten, aber eine Hauptklasse Kopie ist nur eine zwischen ihnen und so eine Kopie zwischen Nummer von Objekten müssen wir die Hauptmethode als statisch machen.
- 1. Warum SwingUtilities.invokeLater in der Hauptmethode verwenden?
- 2. Warum ist die Hauptmethode privat?
- 3. Warum sind die meisten Methoden von System.Array statisch?
- 4. Warum ist String.Format statisch?
- 5. Was ist der Einstiegspunkt für eine asp.net mvc 4-Anwendung?
- 6. Werfen Ausnahme in der Hauptmethode
- 7. Warum ist der umgebende Typ eines dynamischen Ausdrucks in C# nicht statisch aufgelöst?
- 8. Warum muss der Löschoperator statisch sein?
- 9. Ist C# statisch getippt oder meist statisch getippt?
- 10. Zweck der Hauptmethode in der Java-Webanwendung
- 11. Wie ändert man den Einstiegspunkt der EXE-Datei?
- 12. Java 8 Stream in der Hauptmethode
- 13. C++ Einstiegspunkt finden
- 14. Was ist der korrekte Einstiegspunkt für eine Win32-Konsolenanwendung?
- 15. Verwenden der Hauptmethode in Gluon Anwendung
- 16. Was ist die Hauptmethode in der abstrakten Klasse?
- 17. Was ist der Modifikator "statisch neu" für eine Funktion?
- 18. sparkjava: Müssen Routen in der Hauptmethode sein?
- 19. Warum dürfen wir eine letzte Hauptmethode in Java haben?
- 20. Auswahl der Komponenten mit den meisten Abweichungen in PCA
- 21. Statisch const doppelt in C++
- 22. Warum ist Python statisch/Klassenmethode nicht aufrufbar?
- 23. Über den Einstiegspunkt von PE in Windows
- 24. Warum sind Schnittstellen statisch?
- 25. Statisch in C# verbinden
- 26. Eclipse-Installation existiert nicht in den Programmen
- 27. Warum wird Mehrfachvererbung in den meisten Programmiersprachen nicht unterstützt?
- 28. Warum ist die Random-Klasse nicht statisch?
- 29. Warum ist es vorzuziehen, eine statische Methode statisch aus einer Instanz der Klasse der Methode aufzurufen?
- 30. Warum ist std :: bitset :: size nicht-statisch
Dies ist eine gute Frage, für die es keine wirklich befriedigende Antwort geben kann. Vor dem Aufruf von Main werden viele Dinge ausgeführt, die so viele Objektkonstruktoren enthalten können, wie Sie möchten. Aber trotzdem, ich denke, wenn der Konstruktor für das Programm-Objekt eine Ausnahme wegen zu wenig Speicher hat, dann hat Ihr Computer einen * wirklich * schlechten Tag! –
Weil Sie C++ - und Java-Programmierer nicht zu sehr erschrecken wollen. – zaratustra