Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Tips
Är du nybörjare på att utveckla programvara? Börja med självstudierna Komma igång först. Dessa handledningar använder toppnivåuttalanden, vilket är enklare för nya appar.
Arbetar du med en befintlig kodbas? Många befintliga program använder en explicit Main metod. Den här artikeln förklarar hur den fungerar och hur den används effektivt.
När du startar ett C#-program anropar körmiljön Main metoden. Metoden Main är startpunkten för ett C#-program.
Ett C#-program kan bara ha en startpunkt. Om du har mer än en klass med en Main metod måste du använda kompileringsalternativet StartupObject när du kompilerar programmet för att ange vilken metod som Main ska användas som startpunkt. Mer information finns i StartupObject (C#-kompilatoralternativ). I följande exempel visas antalet kommandoradsargument som första åtgärd:
class TestClass
{
static void Main(string[] args)
{
Console.WriteLine(args.Length);
}
}
Översikt
Metoden Main är startpunkten för ett körbart program. När ditt program startar anropar körningen Main innan någon annan kod körs. När Main returnerar avslutas programmet. Du deklarerar Main med följande regler:
- Du måste deklarera
Maini en klass eller struct. Det omgivandeclasskan varastatic. -
Mainmåste varastatic. -
Mainkan ha alla åtkomstmodifierare. -
Mainkan returneravoid,int,TaskellerTask<int>. - Om och endast om
Mainreturnerar enTaskellerTask<int>kan deklarationen avMaininnehållaasyncmodifieraren. Den här regeln utesluter specifikt enasync void Mainmetod. - Du kan deklarera
Mainmetoden med eller utan enstring[]parameter som innehåller kommandoradsargument. När du använder Visual Studio för att skapa Windows-program kan du lägga till parametern manuellt eller använda GetCommandLineArgs() metoden för att hämta kommandoradsargumenten. Parametrar är nollindexerade kommandoradsargument. Till skillnad från C och C++ behandlas inte namnet på programmet som det första kommandoradsargumentet i matrisenargs, men det är det första elementet i GetCommandLineArgs() metoden.
I följande lista visas permutationer av Main deklarationer:
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) { }
Föregående exempel anger inte någon åtkomstmodifierare, så de är implicita private som standard. Du kan ange valfri explicit åtkomstmodifierare.
I följande tabell sammanfattas alla giltiga Main signaturer och när var och en ska användas:
Main deklaration |
Använder args |
Innehåller await |
Returnerar slutkod |
|---|---|---|---|
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 |
Välj den enklaste signaturen som passar dina behov. Om du inte behöver kommandoradsargument utelämnar du parametern string[] args . Om du inte behöver returnera en slutkod använder du void eller Task. Om du behöver anropa asynkrona metoder använder du async med en Task eller Task<int> returtyp.
Returvärden för Main()
När du returnerar int eller Task<int>kan programmet skicka statusinformation till andra program eller skript som kör den körbara filen. Ett returvärde 0 för innebär vanligtvis framgång, och ett värde som inte är noll innebär att det finns ett fel.
I följande exempel returneras en slutkod:
class MainReturnValTest
{
static int Main()
{
//...
return 0;
}
}
När du har kört programmet kan du kontrollera slutkoden. I PowerShell använder du $LastExitCode. I en batchfil eller ett shell-skript använder du %ERRORLEVEL%.
Om din Main metod använder awaitdeklarerar du den som async med en Task eller Task<int> returtyp. Körningen anropar Main och väntar på att Task ska slutföras innan processen avslutas. Returtypen kan inte vara void eller int eftersom async modifieraren kräver en returtyp som körningen kan vänta på och voidint inte representerar pågående arbete, så processen kan avslutas innan asynkrona åtgärder slutförs. Använd Task när du inte behöver någon slutkod eller Task<int> när du gör det:
class Program
{
static async Task<int> Main(string[] args)
{
return await AsyncConsoleWork();
}
private static async Task<int> AsyncConsoleWork()
{
return 0;
}
}
Kommandoradsargument
Inkludera en string[] args parameter i Main deklarationen för att acceptera kommandoradsargument. Om du inte behöver dem utelämnar du parametern. Parametern args är en String matris som aldrig är null – om inga argument anges är den Length noll.
Du kan konvertera strängargument till andra typer med hjälp Parse av eller Convert:
long num = long.Parse(args[0]);
Tips
Det kan vara komplicerat att parsa kommandoradsargument. Överväg att använda biblioteket System.CommandLine för att förenkla processen.
Ett fungerande exempel finns i Visa kommandoradsargument.
Språkspecifikation för C#
Mer information finns i C#-språkspecifikationen. Språkspecifikationen är den slutgiltiga källan för C#-syntax och -användning.