Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Toppnivåinstruktioner – program utan
Du behöver inte uttryckligen inkludera en Main metod i ett konsolprogramprojekt. I stället kan du använda funktionen för toppnivåinstruktioner för att minimera den kod som du måste skriva.
Med toppnivåinstruktioner kan du skriva körbar kod direkt i roten av en fil, vilket eliminerar behovet av att omsluta koden i en klass eller metod.
Det innebär att du kan skapa program utan ceremoni av en Program klass och en Main metod.
I det här fallet genererar kompilatorn en Program klass med en startpunktsmetod för programmet. Namnet på den genererade metoden är inte Main, det är en implementeringsinformation som koden inte kan referera direkt till.
Här är en Program.cs fil som är ett komplett C#-program:
Console.WriteLine("Hello World!");
Med toppnivåinstruktioner kan du skriva enkla program för små verktyg som Azure Functions och GitHub Actions. De gör det också enklare för nya C#-programmerare att komma igång med att lära sig och skriva kod.
I följande avsnitt förklaras reglerna för vad du kan och inte kan göra med toppnivåinstruktioner.
Endast en toppnivåfil
Ett program får bara ha en startpunkt. Ett projekt kan bara ha en fil med toppnivåinstruktioner. Om du placerar toppnivåinstruktioner i mer än en fil i ett projekt resulterar följande kompilatorfel:
CS8802 Endast en kompileringsenhet kan ha toppnivåinstruktioner.
Ett projekt kan ha valfritt antal källkodsfiler som inte har toppnivåinstruktioner.
Inga andra startpunkter
Du kan skriva en Main metod explicit, men den kan inte fungera som en startpunkt. Kompilatorn utfärdar följande varning:
CS7022 Startpunkten för programmet är global kod. ignorerar startpunkten Main().
I ett projekt med toppnivåinstruktioner kan du inte använda kompilatoralternativet -main för att välja startpunkten, även om projektet har en eller flera Main metoder.
              using Direktiv
För en enskild fil som innehåller toppnivå uttalanden måste direktiv using komma först i den filen, som i det här exemplet:
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;
Globalt namnområde
Toppnivåinstruktioner finns implicit i det globala namnområdet.
Namnområden och typdefinitioner
En fil med toppnivåinstruktioner kan också innehålla namnområden och typdefinitioner, men de måste komma efter toppnivåinstruktionerna. Till exempel:
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
Toppnivåinstruktioner kan referera till variabeln args för att få åtkomst till alla kommandoradsargument som har angetts. Variabeln args är aldrig null, men den Length är noll om inga kommandoradsargument har angetts. Till exempel:
if (args.Length > 0)
{
    foreach (var arg in args)
    {
        Console.WriteLine($"Argument={arg}");
    }
}
else
{
    Console.WriteLine("No arguments");
}
await
Du kan anropa en asynkron metod med hjälp awaitav . Till exempel:
Console.Write("Hello ");
await Task.Delay(5000);
Console.WriteLine("World!");
Avsluta koden för processen
Om du vill returnera ett int värde när programmet slutar använder du -instruktionen return som i en Main metod som returnerar en int. Till exempel:
string? s = Console.ReadLine();
int returnValue = int.Parse(s ?? "-1");
return returnValue;
Implicit startpunktsmetod
Kompilatorn genererar en metod som fungerar som programinmatningspunkt för ett projekt med toppnivåinstruktioner. Metodens signatur beror på om toppnivåinstruktionerna innehåller nyckelordet await eller -instruktionen return . I följande tabell visas hur metodsignaturen skulle se ut med hjälp av metodnamnet Main i tabellen för enkelhetens skull.
| Toppnivåkod innehåller | Implicit Mainsignatur | 
|---|---|
| awaitochreturn | static async Task<int> Main(string[] args) | 
| await | static async Task Main(string[] args) | 
| return | static int Main(string[] args) | 
| Nej awaitellerreturn | static void Main(string[] args) | 
Från och med C# 14 kan program vara filbaserade appar, där en enda fil innehåller programmet. Du kör filbaserade appar med kommandot dotnet run <file.cs>eller använder #!/usr/local/share/dotnet/dotnet run direktivet som den första raden (endast unix-gränssnitt).
Språkspecifikation för C#
Mer information finns i C#-språkspecifikationen. Språkspecifikationen är den slutgiltiga källan för C#-syntax och -användning.