C#-konsolappmallen genererar toppnivåinstruktioner

Från och med .NET 6 genererar projektmallen för nya C#-konsolappar följande kod i filen Program.cs :

// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");

De nya utdata använder de senaste C#-funktionerna som förenklar koden du behöver skriva för ett program. För .NET 5 och tidigare versioner genererar konsolappmallen följande kod:

using System;

namespace MyApp // Note: actual namespace depends on the project name.
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

Dessa två formulär representerar samma program. Båda är giltiga med C# 10.0. När du använder den nyare versionen behöver du bara skriva metodens Main brödtext. Kompilatorn genererar en Program klass med en startpunktsmetod och placerar alla dina toppnivåinstruktioner i den metoden. Namnet på den genererade metoden är inte Main, det är en implementeringsinformation som koden inte kan referera direkt till. Du behöver inte ta med de andra programelementen. Kompilatorn genererar dem åt dig. Du kan lära dig mer om den kod som kompilatorn genererar när du använder toppnivåinstruktioner i artikeln om toppnivåinstruktioner i avsnittet grunderna i C#-guiden.

Du har två alternativ för att arbeta med självstudier som inte har uppdaterats för att använda .NET 6+-mallar:

  • Använd det nya programformatet och lägg till nya toppnivåinstruktioner när du lägger till funktioner.
  • Konvertera det nya programformatet till det äldre formatet med en Program klass och en Main metod.

Om du vill använda de gamla mallarna kan du läsa Använda det gamla programformatet senare i den här artikeln.

Använd det nya programformatet

De funktioner som gör det nya programmet enklare är instruktioner på toppnivå, globala using direktiv och implicita using direktiv.

Termen toppnivåinstruktioner innebär att kompilatorn genererar klass- och metodelementen för huvudprogrammet. Den kompilatorgenererade klassen och startpunktsmetoden deklareras i det globala namnområdet. Du kan titta på koden för det nya programmet och föreställa dig att den innehåller -instruktionerna i metoden Main som genererades av tidigare mallar, men i det globala namnområdet.

Du kan lägga till fler instruktioner i programmet, precis som du kan lägga till fler instruktioner i din Main metod i traditionell stil. Du kan komma åt args (kommandoradsargument), använda awaitoch ange slutkoden. Du kan till och med lägga till funktioner. De skapas som lokala funktioner kapslade i den genererade startpunktsmetoden. Lokala funktioner kan inte innehålla några åtkomstmodifierare (till exempel public eller protected).

Både toppnivåinstruktioner och implicita using direktiv förenklar koden som utgör ditt program. Om du vill följa en befintlig självstudie lägger du till nya instruktioner i filen Program.cs som genereras av mallen. Du kan tänka dig att de instruktioner du skriver är mellan de öppna och avslutande klammerparenteserna i Main metoden i instruktionerna i självstudien.

Om du föredrar att använda det äldre formatet kan du kopiera koden från det andra exemplet i den här artikeln och fortsätta självstudien som tidigare.

Du kan lära dig mer om toppnivåinstruktioner i självstudiekursen för utforskning på översta nivån.

Implicita using direktiv

Termen implicita using direktiv innebär att kompilatorn automatiskt lägger till en uppsättning using direktiv baserat på projekttypen. För konsolprogram ingår följande direktiv implicit i programmet:

  • using System;
  • using System.IO;
  • using System.Collections.Generic;
  • using System.Linq;
  • using System.Net.Http;
  • using System.Threading;
  • using System.Threading.Tasks;

Andra programtyper innehåller fler namnområden som är vanliga för dessa programtyper.

Om du behöver using direktiv som inte ingår implicit kan du lägga till dem i .cs-filen som innehåller instruktioner på den översta nivån eller till andra .cs-filer . För using direktiv som du behöver i alla .cs-filer i ett program använder du globala using direktiv.

Inaktivera implicita using direktiv

Om du vill ta bort det här beteendet och manuellt styra alla namnområden i projektet lägger du till <ImplicitUsings>disable</ImplicitUsings> i projektfilen i -elementet <PropertyGroup> , som du ser i följande exempel:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    ...
    <ImplicitUsings>disable</ImplicitUsings>
  </PropertyGroup>

</Project>

Globala using direktiv

Ett globalt using direktiv importerar ett namnområde för hela programmet i stället för en enda fil. Dessa globala direktiv kan läggas till antingen genom att lägga till ett <Using> objekt i projektfilen eller genom att lägga till direktivet i global using en kodfil.

Du kan också lägga till ett <Using> objekt med ett Remove attribut i projektfilen för att ta bort ett specifikt implicit using direktiv. Om funktionen implicita using direktiv till exempel är aktiverad med <ImplicitUsings>enable</ImplicitUsings>tar du bort System.Net.Http namnområdet från de som implicit importeras genom att lägga till följande <Using> objekt:

<ItemGroup>
  <Using Remove="System.Net.Http" />
</ItemGroup>

Använd det gamla programformatet

Från och med .NET SDK 6.0.300 har mallen console ett --use-program-main alternativ. Använd det för att skapa ett konsolprojekt som inte använder toppnivåinstruktioner och har en Main metod.

dotnet new console --use-program-main

Den genererade Program.cs är följande:

namespace MyProject;
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello, World!");
    }
}

Använda det gamla programformatet i Visual Studio

  1. När du skapar ett nytt projekt navigerar installationsstegen till sidan Ytterligare informationskonfiguration . På den här sidan markerar du kryssrutan Använd inte instruktioner på den översta nivån.

    Visual Studio do not use top-level statements check box

  2. När projektet har skapats är innehållet Program.cs följande:

    namespace MyProject;
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");
        }
    }
    

Kommentar

Visual Studio bevarar värdet för alternativen nästa gång du skapar projektet baserat på samma mall, så som standard när du skapar Console App-projekt nästa gång kryssrutan "Använd inte toppnivåinstruktioner" markeras. Innehållet i Program.cs filen kan vara annorlunda för att matcha kodformatet som definierats i de globala inställningarna för Visual Studio-textredigeraren eller EditorConfig filen.

Mer information finns i Skapa portabla anpassade redigeringsinställningar med EditorConfig och Alternativ, Textredigeraren, C#, Avancerat.