Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Příkazy nejvyšší úrovně – programy bez
Návod
Začínáte s vývojem softwaru? Začněte nejprve kurzy Začínáme . Tyto kurzy používají příkazy nejvyšší úrovně, takže už se seznámíte se základy.
Hledáte alternativní metodu Main ? Viz vstupní bod metody Main pro explicitní přístup k metodě Main.
Pro nové aplikace používejte příkazy nejvyšší úrovně . Pomocí příkazů nejvyšší úrovně můžete napsat spustitelný kód přímo v kořenovém adresáři souboru.
Tady je soubor Program.cs, který je úplným programem jazyka C#:
Console.WriteLine("Hello World!");
Když vytvoříte novou konzolovou aplikaci pomocí dotnet new console, ve výchozím nastavení používá příkazy nejvyšší úrovně. Fungují dobře pro programy libovolné velikosti – od malých nástrojů a Azure Functions až po úplné aplikace. Pokud máte existující aplikaci, která používá explicitní Main metodu, nemusíte ji převádět. Oba styly se kompilují do ekvivalentního kódu.
Následující části popisují pravidla toho, co můžete a nemůžete dělat s příkazy nejvyšší úrovně.
Pravidla vstupního bodu
Aplikace musí mít pouze jeden vstupní bod. Projekt může mít pouze jeden soubor s příkazy nejvyšší úrovně, ale může mít libovolný počet souborů zdrojového kódu, které nemají příkazy nejvyšší úrovně. Metodu Main můžete explicitně napsat, ale nemůže fungovat jako vstupní bod. V projektu s příkazy nejvyšší úrovně nemůžete pomocí -main možnosti kompilátoru vybrat vstupní bod, i když má projekt jednu nebo více Main metod.
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 podpis metody vypadá, 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) |
Počínaje jazykem C# 14 můžou být aplikace založené na souborech, kde jeden soubor obsahuje program.
Aplikace založené na souborech spustíte pomocí příkazu dotnet <file.cs>nebo přímo použijete název souboru v unixu (například ./file.cs). Druhá vyžaduje zahrnutí direktivy #!/usr/bin/env dotnet jako prvního řádku a nastavení oprávnění execute (chmod +x <file>).
using směrnice
Pro jeden soubor obsahující příkazy nejvyšší úrovně musí using direktivy přijít jako první v tomto souboru, jak je znázorněno v následujícím příkladu:
using System.Text;
StringBuilder builder = new();
builder.AppendLine("The following arguments are passed:");
foreach (var arg in args)
{
builder.AppendLine($"Argument={arg}");
}
Console.WriteLine(builder.ToString());
return 0;
Obory názvů a definice typů
Příkazy nejvyšší úrovně jsou zahrnuty v globálním oboru názvů implicitně. 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, aby při spuštění přistupovaly k jakýmkoli argumentům příkazového řádku předanými aplikaci. Proměnná args není nikdy null, ale její Length hodnota je nula, pokud nebyly poskytnuty žá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 a ukončovací kód
Slouží await k volání asynchronní metody. Pokud váš kód nejvyšší úrovně obsahuje await, kompilátor vygeneruje vstupní bod, který vrátí hodnotu Task. Modul runtime monitoruje Task pro účely dokončení a udržuje proces aktivní, dokud nebude dokončena všechna asynchronní práce. Příklad:
Console.Write("Hello ");
await Task.Delay(5000);
Console.WriteLine("World!");
Pokud chcete po ukončení aplikace vrátit ukončovací kód, použijte tento return příkaz. Kompilátor vygeneruje vstupní bod, který se vrátí Task<int> , když váš kód obsahuje obojí await a returnnebo int pokud obsahuje pouze return. Příklad:
string? s = Console.ReadLine();
int returnValue = int.Parse(s ?? "-1");
return returnValue;