Sjabloon voor C#-console-app genereert instructies op het hoogste niveau

Vanaf .NET 6 genereert de projectsjabloon voor nieuwe C#-console-apps de volgende code in het bestand Program.cs :

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

De nieuwe uitvoer maakt gebruik van recente C#-functies die de code vereenvoudigen die u moet schrijven voor een programma. Voor .NET 5 en eerdere versies genereert de console-appsjabloon de volgende code:

using System;

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

Deze twee formulieren vertegenwoordigen hetzelfde programma. Beide zijn geldig met C# 10.0. Wanneer u de nieuwere versie gebruikt, hoeft u alleen de hoofdtekst van de Main methode te schrijven. De compiler genereert een Program klasse met een invoerpuntmethode en plaatst al uw instructies op het hoogste niveau in die methode. De naam van de gegenereerde methode is niet Main, het is een implementatiedetails waarnaar uw code niet rechtstreeks kan verwijzen. U hoeft de andere programma-elementen niet op te nemen. De compiler genereert deze voor u. Meer informatie over de code die de compiler genereert wanneer u instructies op het hoogste niveau gebruikt in het artikel over instructies op het hoogste niveau in de sectie Basisprincipes van de C#-handleiding.

U hebt twee opties om te werken met zelfstudies die niet zijn bijgewerkt voor het gebruik van .NET 6+ sjablonen:

  • Gebruik de nieuwe programmastijl en voeg nieuwe instructies op het hoogste niveau toe terwijl u functies toevoegt.
  • Converteer de nieuwe programmastijl naar de oudere stijl, met een Program klasse en een Main methode.

Zie De oude programmastijl verderop in dit artikel gebruiken als u de oude sjablonen wilt gebruiken.

De nieuwe programmastijl gebruiken

De functies die het nieuwe programma eenvoudiger maken, zijn instructies op het hoogste niveau, globale using richtlijnen en impliciete using instructies.

De term instructies op het hoogste niveau betekent dat de compiler de klasse- en methode-elementen voor uw hoofdprogramma genereert. De door de compiler gegenereerde klasse- en invoerpuntmethode worden gedeclareerd in de globale naamruimte. U kunt de code voor de nieuwe toepassing bekijken en zich voorstellen dat deze de instructies bevat in de Main methode die is gegenereerd door eerdere sjablonen, maar in de globale naamruimte.

U kunt meer instructies toevoegen aan het programma, net zoals u meer instructies aan uw Main methode in de traditionele stijl kunt toevoegen. U kunt toegang krijgen ( args opdrachtregelargumenten), gebruiken awaiten de afsluitcode instellen. U kunt zelfs functies toevoegen. Ze worden gemaakt als lokale functies die zijn genest binnen de gegenereerde invoerpuntmethode. Lokale functies kunnen geen toegangsaanpassingen bevatten (bijvoorbeeld public of protected).

Zowel instructies op het hoogste niveau als impliciete using instructies vereenvoudigen de code waaruit uw toepassing bestaat. Als u een bestaande zelfstudie wilt volgen, voegt u nieuwe instructies toe aan het bestand Program.cs dat door de sjabloon is gegenereerd. U kunt zich voorstellen dat de instructies die u schrijft zich tussen de open en gesloten accolades in de Main methode bevinden in de instructies van de zelfstudie.

Als u liever de oudere indeling gebruikt, kunt u de code uit het tweede voorbeeld in dit artikel kopiëren en doorgaan met de zelfstudie zoals voorheen.

Meer informatie over instructies op het hoogste niveau vindt u in de zelfstudie over instructies op het hoogste niveau.

Impliciete using instructies

De term impliciete using instructies betekent dat de compiler automatisch een reeks richtlijnen toevoegt op basis van using het projecttype. Voor consoletoepassingen zijn de volgende instructies impliciet opgenomen in de toepassing:

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

Andere toepassingstypen bevatten meer naamruimten die gebruikelijk zijn voor deze toepassingstypen.

Als u instructies nodig hebt using die niet impliciet zijn opgenomen, kunt u ze toevoegen aan het CS-bestand met instructies op het hoogste niveau of aan andere .cs-bestanden. Gebruik usingglobale using richtlijnen voor instructies die u nodig hebt in alle CS-bestanden in een toepassing.

Impliciete using instructies uitschakelen

Als u dit gedrag wilt verwijderen en alle naamruimten in uw project handmatig wilt beheren, voegt u dit toe <ImplicitUsings>disable</ImplicitUsings> aan het projectbestand in het <PropertyGroup> element, zoals wordt weergegeven in het volgende voorbeeld:

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

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

</Project>

Globale using richtlijnen

Een globale using richtlijn importeert een naamruimte voor uw hele toepassing in plaats van één bestand. Deze globale instructies kunnen worden toegevoegd door een <Using> item toe te voegen aan het projectbestand of door de global using instructie toe te voegen aan een codebestand.

U kunt ook een <Using> item met een Remove kenmerk toevoegen aan uw projectbestand om een specifieke impliciete using instructie te verwijderen. Als de functie voor impliciete using instructies bijvoorbeeld is ingeschakeld, <ImplicitUsings>enable</ImplicitUsings>wordt met het volgende <Using> item de System.Net.Http naamruimte verwijderd van de naamruimte die impliciet wordt geïmporteerd:

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

De oude programmastijl gebruiken

Vanaf .NET SDK 6.0.300 heeft de console sjabloon een --use-program-main optie. Gebruik dit om een consoleproject te maken dat geen instructies op het hoogste niveau gebruikt en een Main methode heeft.

dotnet new console --use-program-main

Het gegenereerde Program.cs is als volgt:

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

De oude programmastijl gebruiken in Visual Studio

  1. Wanneer u een nieuw project maakt, gaan de installatiestappen naar de pagina Aanvullende informatie-instelling . Schakel op deze pagina het selectievakje Geen instructies op het hoogste niveau gebruiken in.

    Visual Studio do not use top-level statements check box

  2. Nadat uw project is gemaakt, is de Program.cs inhoud als volgt:

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

Notitie

Visual Studio behoudt de waarde voor de opties wanneer u het project de volgende keer maakt op basis van dezelfde sjabloon. Standaard wordt het selectievakje 'Geen instructies op het hoogste niveau gebruiken' ingeschakeld wanneer het console-app-project de volgende keer wordt gemaakt. De inhoud van het Program.cs bestand kan afwijken van de codestijl die is gedefinieerd in de algemene instellingen van de Visual Studio-teksteditor of het EditorConfig bestand.

Zie Draagbare, aangepaste editorinstellingen maken met EditorConfig en Opties, Teksteditor, C#, Geavanceerd voor meer informatie.