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
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
I föregående kod beror det faktiska namnområdet på projektnamnet.
Dessa två formulär representerar samma program. Båda är giltiga i C#. När du använder den nyare versionen behöver du bara skriva brödtexten för metoden Main
. 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 koden 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 handledningar som inte 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 enMain
-metod.
Om du vill använda de gamla mallarna kan du läsa Använd det gamla programformatet senare i den här artikeln.
Använd det nya programformatet
De funktioner som gör det nya programmet enklare är toppnivåuttryck, globala using
direktivoch 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 Main
-metoden som genererades av tidigare mallar, men i den globala namnrymden.
Du kan lägga till fler instruktioner i programmet, precis som du kan lägga till fler instruktioner i din Main
-metod i traditionellt format. Du kan få åtkomst till args
(kommandoradsargument), använda await
och ange avslutningskoden. 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örenkla koden som utgör ditt program. Om du vill följa en befintlig självstudie lägger du till nya instruktioner i den Program.cs fil som genereras av mallen. Du kan tänka dig att de instruktioner du skriver är mellan de öppna och avslutande klammerparenteserna i metoden Main
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 av toppnivåinstruktioner.
Implicita using
-direktiven
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änd 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 <PropertyGroup>
-elementet, 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 global using
-direktivet i 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. Till exempel, om den implicita using
-direktivfunktionen är aktiverad med <ImplicitUsings>enable</ImplicitUsings>
, så tar följande <Using>
-objekt bort System.Net.Http
-namnområdet från dem som implicit importeras:
<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 som 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
När du skapar ett nytt projekt navigeras du genom installationsstegen till konfigurationssidan Ytterligare information. På den här sidan markerar du kryssrutan Använd inte instruktioner på den översta nivån.
När projektet har skapats är
Program.cs
innehåll följande:namespace MyProject; class Program { static void Main(string[] args) { Console.WriteLine("Hello, World!"); } }
Anteckning
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 den Program.cs
filen kan skilja sig åt för att matcha kodformatet som definierats i de globala inställningarna för Visual Studio-textredigeraren eller EditorConfig
filen.
För mer information, se Skapa bärbara, anpassade redigerarinställningar med EditorConfig och Alternativ, Textredigerare, C#, Avancerat.