Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Tipp.
Új szoftverfejlesztés? Először az Első lépések oktatóanyagokkal kezdje. Ezek az oktatóanyagok felső szintű utasításokat használnak, ami egyszerűbb az új alkalmazásokhoz.
Meglévő kódbázissal dolgozik? Sok meglévő alkalmazás használ explicit Main módszert. Ez a cikk bemutatja, hogyan működik, és hogyan használható hatékonyan.
C#-alkalmazás indításakor a futtatókörnyezet meghívja a metódust Main . A Main metódus egy C#-alkalmazás belépési pontja.
A C#-programoknak csak egy belépési pontjuk lehet. Ha egynél több osztálya van egy Main metódussal, akkor a program lefordításakor a StartupObject fordítót kell használnia annak megadásához, hogy melyik Main metódus szolgál belépési pontként. További információ: StartupObject (C# Compiler Options). Az alábbi példa a parancssori argumentumok számát jeleníti meg első műveletként:
class TestClass
{
static void Main(string[] args)
{
Console.WriteLine(args.Length);
}
}
Áttekintés
A Main metódus egy végrehajtható program belépési pontja. Amikor a program elindul, a futtatókörnyezet meghívja Main minden más kód futtatása előtt. Amikor Main visszatér, a program véget ér. A következő szabályokkal deklarálhatja Main :
- Osztályban vagy struktúrában kell deklarálnia
Main. A burkolóclasslehetstatic. -
Mainkell lenniestatic. -
Mainbármilyen hozzáférés-módosítóval rendelkezhet. -
Mainvisszaadhatjavoid,int,TaskvagyTask<int>. - Csak akkor, ha
Mainvisszaad egyTask-t vagyTask<int>-t, aMaindeklaráció tartalmazhatja aasyncmódosítót. Ez a szabály kifejezetten kizár egy metódustasync void Main. - A metódust
Mainparancssori argumentumokatstring[]tartalmazó paraméterrel vagy anélkül deklarálhatja. Ha Windows-alkalmazásokat hoz létre a Visual Studióval, manuálisan is hozzáadhatja a paramétert, vagy használhatja a GetCommandLineArgs() metódust a parancssori argumentumok lekéréséhez. A paraméterek nullával indexelt parancssori argumentumok. A C és C++ nyelven eltérően a program neve nem aargstömb első parancssori argumentuma, hanem a GetCommandLineArgs() metódus első eleme.
Az alábbi lista a Main deklarációk permutációit jeleníti meg.
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) { }
Az előző példák nem adnak meg hozzáférési módosítót, ezért alapértelmezés szerint implicit módon private vannak megadva. Bármilyen explicit hozzáférés-módosító megadható.
Az alábbi táblázat összefoglalja az összes érvényes Main aláírást és az egyes aláírások használatát:
Main nyilatkozat |
Használ args |
Tartalmaz await |
Kilépési kód visszaadása |
|---|---|---|---|
static void Main() |
No | No | No |
static int Main() |
No | No | Igen |
static void Main(string[] args) |
Igen | No | No |
static int Main(string[] args) |
Igen | No | Igen |
static async Task Main() |
No | Igen | No |
static async Task<int> Main() |
No | Igen | Igen |
static async Task Main(string[] args) |
Igen | Igen | No |
static async Task<int> Main(string[] args) |
Igen | Igen | Igen |
Válassza ki az igényeinek leginkább megfelelő egyszerű aláírást. Ha nincs szüksége parancssori argumentumokra, hagyja ki a paramétert string[] args . Ha nem kell visszaküldenie a kilépési kódot, használja void vagy Task. Ha aszinkron metódusokat kell meghívnia, használja a async-t Task vagy Task<int> visszatérési típusként.
Main() visszatérési értékek
Amikor visszatér int vagy Task<int>, a program állapotinformációkat küldhet más programoknak vagy szkripteknek, amelyek futtatják a végrehajtható fájlt. A visszatérési 0 érték általában sikert jelent, a nem érték pedig azt jelenti, hogy hiba történt.
Az alábbi példa egy kilépési kódot ad vissza:
class MainReturnValTest
{
static int Main()
{
//...
return 0;
}
}
A program futtatása után ellenőrizheti a kilépési kódot. PowerShellben használja a $LastExitCode. Batch-fájlban vagy rendszerhéjszkriptben használja a %ERRORLEVEL%.
Ha a Main metódus await-t használ, deklarálja azt async formájában, amelynek visszatérési típusa lehet Task vagy Task<int>. A futtatókörnyezet meghívja Main, és megvárja, amíg a visszaadott Task befejeződik, mielőtt a folyamat kilép. A visszatérési típus nem lehet void , vagy int mert a async módosítóhoz olyan visszatérési típusra van szükség, amelyet a futtatókörnyezet várni tud,void és int nem jelöli a folyamatban lévő munkát, így a folyamat az aszinkron műveletek befejeződése előtt kiléphet. Akkor használja Task , ha nincs szüksége kilépési kódra, vagy Task<int> ha a következőkre van szüksége:
class Program
{
static async Task<int> Main(string[] args)
{
return await AsyncConsoleWork();
}
private static async Task<int> AsyncConsoleWork()
{
return 0;
}
}
Parancssori paraméterek
Adjon meg egy paramétert string[] args a Main deklarációban a parancssori argumentumok elfogadásához. Ha nincs rájuk szüksége, hagyja ki a paramétert. A args paraméter olyan String tömb, amely soha nem null értékű – ha nincsenek argumentumok megadva, az értéke Length nulla.
Sztringargumentumok más típusúvá alakíthatók az Parse vagy Convert használatával.
long num = long.Parse(args[0]);
Tipp.
A parancssori argumentumok elemzése összetett lehet. A folyamat egyszerűsítése érdekében fontolja meg a System.CommandLine kódtár használatát.
Egy működő példáért tekintse meg a parancssori argumentumok megjelenítését ismertető témakört.
C# nyelvspecifikáció
További információkért lásd a C# nyelvi specifikációját. A nyelvi specifikáció a C#-szintaxis és -használat végleges forrása.