Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Aanbeveling
Nieuw bij het ontwikkelen van software? Begin eerst met de handleiding Aan de slag. In deze zelfstudies worden top-level statements gebruikt, wat eenvoudiger is voor nieuwe apps.
Werkt u met een bestaande codebase? Veel bestaande toepassingen gebruiken een expliciete Main methode. In dit artikel wordt uitgelegd hoe het werkt en hoe u het effectief kunt gebruiken.
Wanneer u een C#-toepassing start, roept de runtime de Main methode aan. De Main methode is het toegangspunt van een C#-toepassing.
Een C#-programma kan slechts één ingangspunt hebben. Als u meer dan één klasse met een Main methode hebt, moet u de optie StartupObject-compiler gebruiken wanneer u uw programma compileert om op te geven welke Main methode als invoerpunt fungeert. Zie StartupObject (C#-compileropties) voor meer informatie. In het volgende voorbeeld wordt het aantal opdrachtregelargumenten weergegeven als eerste actie:
class TestClass
{
static void Main(string[] args)
{
Console.WriteLine(args.Length);
}
}
Overzicht
De Main methode is het toegangspunt van een uitvoerbaar programma. Wanneer uw programma wordt gestart, roept Main de runtime aan voordat andere code wordt uitgevoerd. Wanneer Main terugkeert, eindigt het programma. U declareert Main met deze regels:
- Je moet
Mainbinnen een klasse of struct declareren. Het omliggendeclasskanstaticzijn. -
Mainmoet zijn:static. -
Mainkan elke toegangsmodifier hebben. -
Mainkanvoid,int,TaskofTask<int>retourneren. - Slechts wanneer
MainofTaskofTask<int>wordt geretourneerd, kan de declaratie vanMainde modificatorasyncbevatten. Deze regel sluit specifiek eenasync void Mainmethode uit. - U kunt de
Mainmethode declareren met of zonder eenstring[]parameter die opdrachtregelargumenten bevat. Wanneer u Visual Studio gebruikt om Windows-toepassingen te maken, kunt u de parameter handmatig toevoegen of anders de methode gebruiken om de GetCommandLineArgs() opdrachtregelargumenten op te halen. Parameters zijn met nul geïndexeerde opdrachtregel-argumenten. In tegenstelling tot C en C++, wordt de naam van het programma niet behandeld als het eerste opdrachtregelargument in deargsmatrix, maar dit is het eerste element van de GetCommandLineArgs() methode.
De volgende lijst bevat permutaties van Main declaraties:
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 de voorgaande voorbeelden wordt geen toegangsmodifier opgegeven, dus zijn ze standaard impliciet private. U kunt elke expliciete toegangsaanpassing opgeven.
De volgende tabel bevat een overzicht van alle geldige Main handtekeningen en wanneer u elke handtekening wilt gebruiken:
Main verklaring |
Gebruikt args |
Bevat await |
Retourneert afsluitcode |
|---|---|---|---|
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 |
Kies de eenvoudigste handtekening die bij uw behoeften past. Als u geen opdrachtregelargumenten nodig hebt, laat u de string[] args parameter weg. Als u geen afsluitcode hoeft te retourneren, gebruikt u void of Task. Als u asynchrone methoden moet aanroepen, gebruikt u async met een Task of Task<int> als retourtype.
Main() retourwaarden
Wanneer u terugkeert int of Task<int>, kan uw programma statusinformatie verzenden naar andere programma's of scripts waarop het uitvoerbare bestand wordt uitgevoerd. Een retourwaarde van 0 meestal betekent succes en een niet-nulwaarde betekent dat er een fout is.
In het volgende voorbeeld wordt een afsluitcode geretourneerd:
class MainReturnValTest
{
static int Main()
{
//...
return 0;
}
}
Nadat u het programma hebt uitgevoerd, kunt u de afsluitcode controleren. Gebruik in PowerShell $LastExitCode. Gebruik %ERRORLEVEL%in een batchbestand of shellscript .
Als uw Main-methode await gebruikt, declareert u deze als async met een Task of Task<int> returntype. De runtime-omgeving roept Main aan en wacht tot de geretourneerde Task is voltooid voordat het proces wordt afgesloten. Het retourtype kan niet zijn void of int omdat voor de async wijzigingsfunctie een retourtype is vereist dat de runtime kan wachten,void en int geen doorlopend werk vertegenwoordigt, zodat het proces kan worden afgesloten voordat asynchrone bewerkingen zijn voltooid. Gebruik Task deze opdracht wanneer u geen afsluitcode nodig hebt of Task<int> wanneer u het volgende doet:
class Program
{
static async Task<int> Main(string[] args)
{
return await AsyncConsoleWork();
}
private static async Task<int> AsyncConsoleWork()
{
return 0;
}
}
Opdrachtregelargumenten
Voeg een string[] args parameter in uw Main declaratie toe om opdrachtregelargumenten te accepteren. Als u deze niet nodig hebt, laat u de parameter weg. De args parameter is een String matrix die nooit null is. Als er geen argumenten worden opgegeven, is de Length parameter nul.
U kunt tekenreeksargumenten converteren naar andere typen met behulp van Parse of Convert:
long num = long.Parse(args[0]);
Aanbeveling
Het parseren van opdrachtregelargumenten kan complex zijn. Overweeg het gebruik van de bibliotheek System.CommandLine om het proces te vereenvoudigen.
Zie Opdrachtregelargumenten weergeven voor een werkend voorbeeld.
C#-taalspecificatie
Zie de C#-taalspecificatie voor meer informatie. De taalspecificatie is de definitieve bron voor de C#-syntaxis en het gebruik.