Megosztás a következőn keresztül:


Main() és parancssori argumentumok

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ó class lehet static.
  • Main kell lennie static.
  • Main bármilyen hozzáférés-módosítóval rendelkezhet.
  • Main visszaadhatja void, int, Task vagy Task<int>.
  • Csak akkor, ha Main visszaad egy Task-t vagy Task<int>-t, a Main deklaráció tartalmazhatja a async módosítót. Ez a szabály kifejezetten kizár egy metódust async void Main .
  • A metódust Main parancssori argumentumokat string[] 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 a args tö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.