Instrukcje najwyższego poziomu — programy bez Main
metod
Nie musisz jawnie dołączać Main
metody do projektu aplikacji konsolowej. Zamiast tego możesz użyć funkcji instrukcji najwyższego poziomu, aby zminimalizować kod, który trzeba napisać.
Instrukcje najwyższego poziomu umożliwiają pisanie kodu wykonywalnego bezpośrednio w katalogu głównym pliku, eliminując konieczność opakowywania kodu w klasie lub metodzie.
Oznacza to, że można tworzyć programy bez ceremonii Program
klasy i Main
metody.
W tym przypadku kompilator generuje klasę Program
z metodą punktu wejścia dla aplikacji. Nazwa wygenerowanej metody to nie Main
. Jest to szczegół implementacji, do którego kod nie może się odwoływać bezpośrednio.
Oto plik Program.cs, który jest kompletnym programem języka C# w języku C# 10:
Console.WriteLine("Hello World!");
Instrukcje najwyższego poziomu umożliwiają pisanie prostych programów dla małych narzędzi, takich jak Azure Functions i GitHub Actions. Ułatwiają również nowym programistom języka C#rozpoczęcie uczenia się i pisania kodu.
W poniższych sekcjach opisano reguły dotyczące tego, co można i których nie można robić za pomocą instrukcji najwyższego poziomu.
Tylko jeden plik najwyższego poziomu
Aplikacja musi mieć tylko jeden punkt wejścia. Projekt może mieć tylko jeden plik z instrukcjami najwyższego poziomu. Umieszczenie instrukcji najwyższego poziomu w więcej niż jednym pliku w projekcie powoduje następujący błąd kompilatora:
CS8802 Tylko jedna jednostka kompilacji może zawierać instrukcje najwyższego poziomu.
Projekt może mieć dowolną liczbę dodatkowych plików kodu źródłowego, które nie mają instrukcji najwyższego poziomu.
Brak innych punktów wejścia
Można jawnie napisać metodę Main
, ale nie może działać jako punkt wejścia. Kompilator generuje następujące ostrzeżenie:
CS7022 Punkt wejścia programu to kod globalny; Ignorując punkt wejścia "Main()".
W projekcie z instrukcjami najwyższego poziomu nie można użyć opcji -main kompilatora, aby wybrać punkt wejścia, nawet jeśli projekt ma co najmniej jedną Main
metodę.
using
Dyrektyw
Jeśli dołączasz using
dyrektywy, muszą one pojawić się najpierw w pliku, jak w tym przykładzie:
using System.Text;
StringBuilder builder = new();
builder.AppendLine("The following arguments are passed:");
// Display the command line arguments using the args variable.
foreach (var arg in args)
{
builder.AppendLine($"Argument={arg}");
}
Console.WriteLine(builder.ToString());
// Return a success code.
return 0;
Globalna przestrzeń nazw
Instrukcje najwyższego poziomu są niejawnie w globalnej przestrzeni nazw.
Przestrzenie nazw i definicje typów
Plik z instrukcjami najwyższego poziomu może również zawierać przestrzenie nazw i definicje typów, ale muszą one pochodzić po instrukcjach najwyższego poziomu. Na przykład:
MyClass.TestMethod();
MyNamespace.MyClass.MyMethod();
public class MyClass
{
public static void TestMethod()
{
Console.WriteLine("Hello World!");
}
}
namespace MyNamespace
{
class MyClass
{
public static void MyMethod()
{
Console.WriteLine("Hello World from MyNamespace.MyClass.MyMethod!");
}
}
}
args
Instrukcje najwyższego poziomu mogą odwoływać się do zmiennej args
w celu uzyskania dostępu do dowolnych wprowadzonych argumentów wiersza polecenia. Zmienna args
nigdy nie ma wartości null, ale jest równa Length
zero, jeśli nie podano żadnych argumentów wiersza polecenia. Na przykład:
if (args.Length > 0)
{
foreach (var arg in args)
{
Console.WriteLine($"Argument={arg}");
}
}
else
{
Console.WriteLine("No arguments");
}
await
Metodę asynchroniową można wywołać przy użyciu polecenia await
. Na przykład:
Console.Write("Hello ");
await Task.Delay(5000);
Console.WriteLine("World!");
Kod zakończenia procesu
Aby zwrócić int
wartość po zakończeniu aplikacji, użyj return
instrukcji , jak w metodzie zwracającej Main
element int
. Na przykład:
string? s = Console.ReadLine();
int returnValue = int.Parse(s ?? "-1");
return returnValue;
Niejawna metoda punktu wejścia
Kompilator generuje metodę służącą jako punkt wejścia programu dla projektu z instrukcjami najwyższego poziomu. Podpis metody zależy od tego, czy instrukcje najwyższego poziomu zawierają await
słowo kluczowe lub instrukcję return
. W poniższej tabeli przedstawiono wygląd podpisu metody przy użyciu nazwy Main
metody w tabeli dla wygody.
Kod najwyższego poziomu zawiera | Podpis niejawny Main |
---|---|
await i return |
static async Task<int> Main(string[] args) |
await |
static async Task Main(string[] args) |
return |
static int Main(string[] args) |
Nie await lub return |
static void Main(string[] args) |
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#.