Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Napiwek
Dopiero zaczynasz programować oprogramowanie? Najpierw zacznij od samouczków Wprowadzenie . W tych samouczkach są używane instrukcje najwyższego poziomu, które są prostsze w przypadku nowych aplikacji.
Praca z istniejącą bazą kodu? Wiele istniejących aplikacji używa jawnej Main metody. W tym artykule wyjaśniono, jak to działa i jak efektywnie z niego korzystać.
Po uruchomieniu aplikacji w języku C# środowisko uruchomieniowe wywołuje metodę Main . Metoda Main jest punktem wejścia aplikacji języka C#.
Program w języku C# może mieć tylko jeden punkt wejścia. Jeśli masz więcej niż jedną klasę Main z metodą, musisz użyć opcji kompilatora StartupObject podczas kompilowania programu, aby określić, która Main metoda służy jako punkt wejścia. Aby uzyskać więcej informacji, zobacz StartupObject (Opcje kompilatora C#). Poniższy przykład przedstawia liczbę argumentów wiersza polecenia jako pierwszą akcję:
class TestClass
{
static void Main(string[] args)
{
Console.WriteLine(args.Length);
}
}
Omówienie
Metoda Main jest punktem wejścia programu wykonywalnego. Po uruchomieniu programu środowisko uruchomieniowe najpierw wywołuje Main, zanim zostanie uruchomiony jakikolwiek inny kod. Gdy Main powróci, program kończy się. Deklarujesz Main zgodnie z następującymi regułami:
- Należy zadeklarować
Mainwewnątrz klasy lub struktury. Otaczanieclassmoże mieć wartośćstatic. -
Mainmusi mieć wartośćstatic. -
Mainmoże mieć dowolny modyfikator dostępu. -
Mainmoże zwrócićvoid,int,TasklubTask<int>. - Jeśli i tylko wtedy, gdy
Mainzwraca wartośćTasklubTask<int>, deklaracjaMainmoże zawieraćasyncmodyfikator. Ta reguła wyklucza konkretnie metodęasync void Main. - Można zadeklarować metodę
Mainz parametrem lub bez parametrustring[], który zawiera argumenty wiersza polecenia. Jeśli używasz programu Visual Studio do tworzenia aplikacji systemu Windows, możesz dodać parametr ręcznie lub użyć GetCommandLineArgs() metody w celu uzyskania argumentów wiersza polecenia. Parametry to argumenty wiersza polecenia z indeksem zerowym. W przeciwieństwie do języka C i C++, nazwa programu nie jest traktowana jako pierwszy argument wiersza polecenia wargstablicy, ale jest to pierwszy element GetCommandLineArgs() metody.
Na poniższej Main liście przedstawiono permutacje deklaracji:
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) { }
Powyższe przykłady nie określają modyfikatora dostępu, więc są one domyślnie niejawne private . Można określić dowolny jawny modyfikator dostępu.
Poniższa tabela zawiera podsumowanie wszystkich prawidłowych Main podpisów i informacje o tym, kiedy należy używać każdego z nich:
Main deklaracja |
Używa args |
Zawiera await |
Zwraca kod zakończenia |
|---|---|---|---|
static void Main() |
Nie. | Nie. | Nie. |
static int Main() |
Nie. | Nie. | Yes |
static void Main(string[] args) |
Yes | Nie. | Nie. |
static int Main(string[] args) |
Yes | Nie. | Yes |
static async Task Main() |
Nie. | Yes | Nie. |
static async Task<int> Main() |
Nie. | Yes | Yes |
static async Task Main(string[] args) |
Yes | Yes | Nie. |
static async Task<int> Main(string[] args) |
Yes | Yes | Yes |
Wybierz najprostszy podpis, który odpowiada Twoim potrzebom. Jeśli nie potrzebujesz argumentów wiersza polecenia, pomiń string[] args parametr . Jeśli nie musisz zwracać kodu zakończenia, użyj polecenia void lub Task. Jeśli musisz wywołać metody asynchroniczne, użyj async z typem zwrotu Task lub Task<int>.
Zwracane wartości Main()
Po powrocie int lub Task<int>program może wysyłać informacje o stanie do innych programów lub skryptów, które uruchamiają plik wykonywalny. Wartość zwracana 0 zwykle oznacza powodzenie, a wartość niezerowa oznacza błąd.
Poniższy przykład zwraca kod zakończenia:
class MainReturnValTest
{
static int Main()
{
//...
return 0;
}
}
Po uruchomieniu programu możesz sprawdzić kod zakończenia. W programie PowerShell użyj polecenia $LastExitCode. W pliku wsadowym lub skryptu powłoki użyj polecenia %ERRORLEVEL%.
Jeśli metoda Main używa await, zadeklaruj ją jako async z typem zwracanym Task lub Task<int>. Środowisko uruchomieniowe wywołuje Main i czeka, aż Task się zakończy, zanim proces zostanie zakończony. Typ zwracany nie może być void lub int ponieważ modyfikator async wymaga typu zwracanego, który środowisko uruchomieniowe może oczekiwać — void i int nie reprezentują bieżącej pracy, więc proces może zakończyć się przed ukończeniem działań asynchronicznych. Użyj Task , gdy nie potrzebujesz kodu zakończenia, lub Task<int> , gdy go potrzebujesz.
class Program
{
static async Task<int> Main(string[] args)
{
return await AsyncConsoleWork();
}
private static async Task<int> AsyncConsoleWork()
{
return 0;
}
}
Argumenty wiersza polecenia
string[] args Dołącz parametr do Main deklaracji, aby zaakceptować argumenty wiersza polecenia. Jeśli ich nie potrzebujesz, pomiń parametr . Parametr args jest tablicą String , która nigdy nie ma wartości null — jeśli nie podano żadnych argumentów, jest to Length zero.
Argumenty ciągów można przekonwertować na inne typy przy użyciu polecenia Parse lub Convert:
long num = long.Parse(args[0]);
Napiwek
Analizowanie argumentów wiersza polecenia może być złożone. Rozważ użycie biblioteki System.CommandLine , aby uprościć proces.
Aby zapoznać się z działającym przykładem, zobacz Jak wyświetlić argumenty wiersza polecenia.
specyfikacja języka C#
Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.