Příkazy nejvyšší úrovně – programy bez Main
metod
Do projektu konzolové aplikace nemusíte explicitně zahrnout metodu Main
. Místo toho můžete pomocí funkce příkazů nejvyšší úrovně minimalizovat kód, který musíte napsat.
Příkazy nejvyšší úrovně umožňují psát spustitelný kód přímo v kořenovém adresáři souboru a eliminují potřebu zabalení kódu do třídy nebo metody.
To znamená, že můžete vytvářet programy bez obřadu Program
třídy a Main
metody.
V tomto případě kompilátor vygeneruje Program
třídu s metodou vstupního bodu pro aplikaci. Název vygenerované metody není Main
, jedná se o podrobnosti implementace, na které váš kód nemůže odkazovat přímo.
Tady je soubor Program.cs, který je úplným programem jazyka C#:
Console.WriteLine("Hello World!");
Příkazy nejvyšší úrovně umožňují psát jednoduché programy pro malé nástroje, jako jsou Azure Functions a GitHub Actions. Zjednodušují také novým programátorům jazyka C#, aby se mohli začít učit a psát kód.
Následující části popisují pravidla toho, co můžete a nemůžete dělat s příkazy nejvyšší úrovně.
Pouze jeden soubor nejvyšší úrovně
Aplikace musí mít pouze jeden vstupní bod. Projekt může mít pouze jeden soubor s příkazy nejvyšší úrovně. Umístění příkazů nejvyšší úrovně do více než jednoho souboru v projektu vede k následující chybě kompilátoru:
CS8802 Pouze jedna kompilační jednotka může mít příkazy nejvyšší úrovně.
Projekt může mít libovolný počet souborů zdrojového kódu, které nemají příkazy nejvyšší úrovně.
Žádné další vstupní body
Metodu Main
můžete napsat explicitně, ale nemůže fungovat jako vstupní bod. Kompilátor vydává následující upozornění:
CS7022 Vstupní bod programu je globální kód; ignoruje vstupní bod Main().
V projektu s příkazy nejvyšší úrovně nemůžete použít možnost -main kompilátoru k výběru vstupního bodu, i když má projekt jednu nebo více Main
metod.
using
směrnice
Pokud zahrnete using
direktivy, musí být v souboru jako v tomto příkladu:
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;
Globální obor názvů
Příkazy nejvyšší úrovně jsou implicitně v globálním oboru názvů.
Obory názvů a definice typů
Soubor s příkazy nejvyšší úrovně může také obsahovat obory názvů a definice typů, ale musí pocházet za příkazy nejvyšší úrovně. Příklad:
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
Příkazy nejvyšší úrovně můžou odkazovat na args
proměnnou pro přístup k zadaným argumentům příkazového řádku. Proměnná args
není nikdy null, ale její Length
hodnota je nula, pokud nebyly zadané žádné argumenty příkazového řádku. Příklad:
if (args.Length > 0)
{
foreach (var arg in args)
{
Console.WriteLine($"Argument={arg}");
}
}
else
{
Console.WriteLine("No arguments");
}
await
Asynchronní metodu můžete volat pomocí await
. Příklad:
Console.Write("Hello ");
await Task.Delay(5000);
Console.WriteLine("World!");
Ukončovací kód procesu
Chcete-li vrátit int
hodnotu po ukončení aplikace, použijte return
příkaz jako v Main
metodě, která vrací int
. Příklad:
string? s = Console.ReadLine();
int returnValue = int.Parse(s ?? "-1");
return returnValue;
Implicitní metoda vstupního bodu
Kompilátor vygeneruje metodu, která slouží jako vstupní bod programu pro projekt s příkazy nejvyšší úrovně. Podpis metody závisí na tom, zda příkazy nejvyšší úrovně obsahují await
klíčové slovo nebo return
příkaz. Následující tabulka ukazuje, jak by podpis metody vypadal, a to pomocí názvu Main
metody v tabulce pro usnadnění práce.
Kód nejvyšší úrovně obsahuje | Implicitní Main podpis |
---|---|
await a return |
static async Task<int> Main(string[] args) |
await |
static async Task Main(string[] args) |
return |
static int Main(string[] args) |
Ne await nebo return |
static void Main(string[] args) |
specifikace jazyka C#
Další informace najdete v tématu Specifikace jazyka C#. Specifikace jazyka je úplným a rozhodujícím zdrojem pro syntaxi a použití jazyka C#.