Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Tipp
Neu bei der Entwicklung von Software? Beginnen Sie zuerst mit den Lernprogrammen " Erste Schritte ". Diese Lernprogramme verwenden Anweisungen auf oberster Ebene, was für neue Apps einfacher ist.
Arbeiten mit einer vorhandenen Codebasis? Viele vorhandene Anwendungen verwenden eine explizite Main Methode. In diesem Artikel wird erläutert, wie es funktioniert und wie sie effektiv verwendet wird.
Wenn Sie eine C#-Anwendung starten, ruft die Laufzeit die Main Methode auf. Die Main-Methode ist der Einstiegspunkt einer C#-Anwendung.
Ein C#-Programm kann nur einen Einstiegspunkt haben. Wenn Sie über mehrere Klassen mit einer Main Methode verfügen, müssen Sie die StartupObject-Compileroption verwenden, wenn Sie das Programm kompilieren, um anzugeben, welche Main Methode als Einstiegspunkt dient. Weitere Informationen finden Sie unter StartupObject (C#-Compileroptionen). Im folgenden Beispiel wird die Anzahl der Befehlszeilenargumente als erste Aktion angezeigt:
class TestClass
{
static void Main(string[] args)
{
Console.WriteLine(args.Length);
}
}
Übersicht
Die Main Methode ist der Einstiegspunkt eines ausführbaren Programms. Wenn Ihr Programm startet, ruft die Laufzeitumgebung Main auf, bevor irgendein anderer Code ausgeführt wird. Wenn Main zurückkehrt, endet das Programm. Sie deklarieren Main mit diesen Regeln:
- Sie müssen
Maininnerhalb einer Klasse oder Struktur deklarieren. Eine einschließendeclasskannstaticsein. -
Mainmuss den Wertstatichaben. -
Mainkann über jeden Zugriffsmodifizierer verfügen. -
Mainkann zurückgebenvoid, ,int,Task, oderTask<int>. - Nur wenn
MaineinTaskoderTask<int>zurückgibt, kann die Deklaration vonMaindenasync-Modifizierer enthalten. Diese Regel schließt speziell eineasync void MainMethode aus. - Sie können die
MainMethode mit oder ohne Parameterstring[]deklarieren, die Befehlszeilenargumente enthält. Wenn Sie Visual Studio zum Erstellen von Windows-Anwendungen verwenden, können Sie den Parameter manuell hinzufügen oder die Methode verwenden GetCommandLineArgs() , um die Befehlszeilenargumente abzurufen. Parameter sind nullindizierte Befehlszeilenargumente. Im Gegensatz zu C und C++ wird der Name des Programms nicht als erstes Befehlszeilenargument imargsArray behandelt, aber es ist das erste Element der GetCommandLineArgs() Methode.
Die folgende Liste zeigt Permutationen von Main Deklarationen:
static void Main() { }
static int Main() { }
static void Main(string[] args) { }
static int Main(string[] args) { }
static async Task Main() { }
static async Task<int> Main() { }
static async Task Main(string[] args) { }
static async Task<int> Main(string[] args) { }
In den vorherigen Beispielen wurde kein Zugriffsmodifizierer angegeben, sodass standardmäßig implizit private verwendet wird. Sie können jeden expliziten Zugriffsmodifizierer angeben.
In der folgenden Tabelle sind alle gültigen Main Signaturen und deren Verwendung zusammengefasst:
MainDeklaration |
Benutzungen args |
Enthält await |
Gibt Ausgangscode zurück. |
|---|---|---|---|
static void Main() |
No | No | No |
static int Main() |
No | No | Ja |
static void Main(string[] args) |
Ja | No | No |
static int Main(string[] args) |
Ja | No | Ja |
static async Task Main() |
No | Ja | No |
static async Task<int> Main() |
No | Ja | Ja |
static async Task Main(string[] args) |
Ja | Ja | No |
static async Task<int> Main(string[] args) |
Ja | Ja | Ja |
Wählen Sie die einfachste Signatur aus, die Ihren Anforderungen entspricht. Wenn Sie keine Befehlszeilenargumente benötigen, lassen Sie den string[] args Parameter weg. Wenn Sie keinen Beendigungscode zurückgeben müssen, verwenden void oder Task. Wenn Sie asynchrone Methoden aufrufen müssen, verwenden Sie async mit einem Task oder Task<int> Rückgabetyp.
Main()-Rückgabewerte
Wenn Sie int oder Task<int> zurückgeben, kann Ihr Programm Statusinformationen an andere Programme oder Skripte senden, die die ausführbare Datei aufrufen. Ein Rückgabewert von 0 normalerweise bedeutet Erfolg, und ein Wert ungleich Null bedeutet, dass ein Fehler vorliegt.
Im folgenden Beispiel wird ein Ausgangscode zurückgegeben:
class MainReturnValTest
{
static int Main()
{
//...
return 0;
}
}
Nach dem Ausführen des Programms können Sie den Beendigungscode überprüfen. Verwenden Sie $LastExitCodein PowerShell . Verwenden Sie %ERRORLEVEL%in einer Batchdatei oder einem Shellskript .
Wenn Ihre Methode Mainawait verwendet, deklarieren Sie sie als async mit einem Rückgabewert vom Typ Task oder Task<int>. Die Laufzeit ruft Main auf und wartet, bis der zurückgegebene Task abgeschlossen ist, bevor der Prozess beendet wird. Der Rückgabetyp kann nicht sein void oder int weil der async Modifizierer einen Rückgabetyp erfordert, auf den die Laufzeit warten kann,void und int stellen keine laufende Arbeit dar, sodass der Prozess beendet werden konnte, bevor asynchrone Vorgänge beendet werden. Verwenden Sie diese Option Task , wenn Sie keinen Exitcode benötigen oder Task<int> wenn Sie dies tun:
class Program
{
static async Task<int> Main(string[] args)
{
return await AsyncConsoleWork();
}
private static async Task<int> AsyncConsoleWork()
{
return 0;
}
}
Befehlszeilenargumente
Fügen Sie einen string[] args Parameter in die Main Deklaration ein, um Befehlszeilenargumente zu akzeptieren. Wenn Sie sie nicht benötigen, lassen Sie den Parameter aus. Der args Parameter ist ein String Array, das niemals null ist – wenn keine Argumente angegeben werden, ist er Length Null.
Sie können Zeichenfolgenargumente in andere Typen konvertieren, indem Sie folgendes verwenden Parse oder Convert:
long num = long.Parse(args[0]);
Tipp
Das Analysieren von Befehlszeilenargumenten kann komplex sein. Erwägen Sie die Verwendung der System.CommandLine-Bibliothek , um den Prozess zu vereinfachen.
Ein funktionierendes Beispiel finden Sie unter Anzeigen von Befehlszeilenargumenten.
C#-Sprachspezifikation
Weitere Informationen erhalten Sie unter C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.