2010-03-02 2 views
37

Warum ist der Einstiegspunkt der Hauptmethode in den meisten C# -Programmen statisch?Warum ist der Einstiegspunkt der Hauptmethode in den meisten C# -Programmen statisch?

+0

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! –

+5

Weil Sie C++ - und Java-Programmierer nicht zu sehr erschrecken wollen. – zaratustra

Antwort

59

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.

+2

+1 Schön erklärt. –

+9

Aber das bedeutet, dass der statische Konstruktor immer noch heißt? –

+3

@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

1

Da sonst ein Objekt erstellt werden müsste, und das Ausführen des Konstruktors könnte negative Nebenwirkungen verursachen.

1

Wie können Sie Ihre Klasseninstanz vor der Hauptversion erstellen?

+3

So wie Sie main anrufen. Sie nicht - die Laufzeit macht eine Menge Sachen vor dem Haupt, Laden von Klassen und Erstellen von Objekten. –

4

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.

0

Statische Methoden können ausgeführt werden, ohne eine Instanz zu erstellen. Per Konvention haben sie die main Methode als Standardmethode zum Aufruf.

0

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

verwendet wird

Referenz: http://en.wikipedia.org/wiki/C_Sharp_(programming_language

16

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?

-3

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.

Verwandte Themen