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 enMain
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 await
och 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
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.
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.