Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Návod
Začínáte s vývojem softwaru? Začněte nejprve kurzy Začínáme . Tyto kurzy používají příkazy nejvyšší úrovně, což je pro nové aplikace jednodušší.
Pracujete s existujícím základem kódu? Mnoho existujících aplikací používá explicitní Main metodu. Tento článek vysvětluje, jak funguje a jak ho efektivně používat.
Když spustíte aplikaci jazyka C#, modul runtime volá metodu Main . Metoda Main je vstupním bodem aplikace jazyka C#.
Program jazyka C# může mít pouze jeden vstupní bod. Pokud máte více než jednu třídu s metodou Main , musíte při kompilaci programu použít možnost kompilátoru StartupObject určit, která Main metoda slouží jako vstupní bod. Další informace naleznete v tématu StartupObject (možnosti kompilátoru jazyka C#). Následující příklad zobrazí počet argumentů příkazového řádku jako první akci:
class TestClass
{
static void Main(string[] args)
{
Console.WriteLine(args.Length);
}
}
Přehled
Metoda Main je vstupním bodem spustitelného programu. Při spuštění programu modul runtime volá Main před provedením jakéhokoli jiného kódu. Když se Main vrátí, program skončí. Deklarujete Main pomocí těchto pravidel:
- Musíte deklarovat
Mainuvnitř třídy nebo struktury. Uzavřeníclassmůže býtstatic. -
Mainmusí býtstatic. -
Mainmůže mít libovolný modifikátor přístupu. -
Mainmůže vrátitvoid, ,intTaskneboTask<int>. - Pokud a pouze pokud
MainvrátíTaskneboTask<int>, může deklaraceMainzahrnovat modifikátorasync. Toto pravidlo výslovně vylučuje metoduasync void Main. - Metodu
Mainmůžete deklarovat pomocí nebo bez parametrustring[], který obsahuje argumenty příkazového řádku. Pokud k vytváření aplikací pro Windows používáte Visual Studio, můžete parametr přidat ručně nebo použít metodu GetCommandLineArgs() k získání argumentů příkazového řádku. Parametry jsou argumenty příkazového řádku indexované nulou. Na rozdíl od jazyka C a C++ není název programu považován za první argument příkazového řádku vargspoli, ale je to první prvek GetCommandLineArgs() metody.
Následující seznam ukazuje permutace deklarací Main :
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) { }
Předchozí příklady nezadávají modifikátor přístupu, takže jsou implicitně private ve výchozím nastavení. Můžete zadat libovolný modifikátor explicitního přístupu.
Následující tabulka shrnuje všechny platné Main podpisy a kdy je použít:
Main prohlášení |
Používá args |
Obsahuje await |
Vrátí ukončovací kód. |
|---|---|---|---|
static void Main() |
Ne | Ne | Ne |
static int Main() |
Ne | Ne | Ano |
static void Main(string[] args) |
Ano | Ne | Ne |
static int Main(string[] args) |
Ano | Ne | Ano |
static async Task Main() |
Ne | Ano | Ne |
static async Task<int> Main() |
Ne | Ano | Ano |
static async Task Main(string[] args) |
Ano | Ano | Ne |
static async Task<int> Main(string[] args) |
Ano | Ano | Ano |
Zvolte nejjednodušší podpis, který vyhovuje vašim potřebám. Pokud nepotřebujete argumenty příkazového řádku, parametr vynecháte string[] args . Pokud nepotřebujete vracet ukončovací kód, použijte void nebo Task. Pokud potřebujete volat asynchronní metody, použijte async s typem Task nebo návratovým typem Task<int>.
Návratové hodnoty Main()
Po návratu int nebo Task<int>může program odesílat informace o stavu jiným programům nebo skriptům, které spustitelný soubor spouští. Návratová 0 hodnota obvykle znamená úspěch a nenulová hodnota znamená, že došlo k chybě.
Následující příklad vrátí ukončovací kód:
class MainReturnValTest
{
static int Main()
{
//...
return 0;
}
}
Po spuštění programu můžete zkontrolovat ukončovací kód. V PowerShellu použijte $LastExitCode. V dávkovém souboru nebo skriptu shellu použijte %ERRORLEVEL%.
Pokud vaše Main metoda používá await, deklarujte ji jako async s návratovým typem Task nebo Task<int>. Modul runtime volá Main a čeká na dokončení vráceného Task před ukončením procesu. Návratový typ nemůže být void nebo int protože async modifikátor vyžaduje návratový typ, který může modul runtime očekávat–void a int nepředstavuje probíhající práci, takže proces může před dokončením asynchronních operací ukončit. Použijte Task , když nepotřebujete ukončovací kód nebo Task<int> když:
class Program
{
static async Task<int> Main(string[] args)
{
return await AsyncConsoleWork();
}
private static async Task<int> AsyncConsoleWork()
{
return 0;
}
}
Argumenty příkazového řádku
string[] args Do deklarace zahrňte Main parametr, který bude přijímat argumenty příkazového řádku. Pokud je nepotřebujete, parametr vynecháte. Parametr args je String pole, které nemá hodnotu null – pokud nejsou zadané žádné argumenty, je to Length nula.
Řetězcové argumenty můžete převést na jiné typy pomocí:ParseConvert
long num = long.Parse(args[0]);
Návod
Analýza argumentů příkazového řádku může být složitá. Zvažte použití knihovny System.CommandLine ke zjednodušení procesu.
Pracovní příklad najdete v tématu Zobrazení argumentů příkazového řádku.
specifikace jazyka C#
Další informace najdete ve specifikaci jazyka C#. Specifikace jazyka je úplným a rozhodujícím zdrojem pro syntaxi a použití jazyka C#.