Delen via


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
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

In de voorgaande code is de werkelijke naamruimte afhankelijk van de projectnaam.

Deze twee formulieren vertegenwoordigen hetzelfde programma. Beide zijn geldig in C#. Wanneer u de nieuwere versie gebruikt, hoeft u alleen de hoofdtekst van de methode Main 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 implementatiedetail 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, vindt u in het artikel over instructies op het hoogste niveau in de sectie basisprincipes van de C#-handleiding.

Je hebt twee opties om te werken met handleidingen die niet zijn bijgewerkt met .NET 6+ templates:

  • 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 gebruiken verderop in dit artikel 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 richtlijnenen impliciete using instructies.

De term topexpressies betekent dat de compiler de klasse- en methode-elementen genereert voor uw hoofdprogramma. De door de compiler gegenereerde klasse- en invoerpuntmethode worden gedeclareerd in de globale naamruimte. U kunt de code voor de nieuwe toepassing bekijken en bedenken 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 args (opdrachtregelargumenten)openen, awaitgebruiken en de afsluitcodeinstellen. 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 die uw toepassing vormt. Als u een bestaande zelfstudie wilt volgen, voegt u nieuwe instructies toe aan het Program.cs-bestand dat door de sjabloon is gegenereerd. U kunt zich voorstellen dat de opdrachten die u schrijft zich tussen de open en gesloten accolades in de Main-methode bevinden, in de instructies van de handleiding.

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 set using instructies op basis van het projecttype toevoegt. 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 using instructies nodig hebt die niet impliciet zijn opgenomen, kunt u deze toevoegen aan het .cs-bestand met instructies op het hoogste niveau of aan andere .cs bestanden. Voor using richtlijnen die u nodig hebt in alle .cs bestanden in een toepassing, gebruikt u globale using richtlijnen.

Impliciete using-instructies uitschakelen

Als u dit gedrag wilt verwijderen en alle naamruimten in uw project handmatig wilt beheren, voegt u <ImplicitUsings>disable</ImplicitUsings> toe 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>

Wereldwijde 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 instructiete verwijderen. Als de functie impliciete using instructies is ingeschakeld met <ImplicitUsings>enable</ImplicitUsings>, zorgt het toevoegen van het volgende <Using> item ervoor dat de System.Net.Http naamruimte uit de lijst van impliciet geïmporteerde naamruimtes wordt verwijderd.

<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

De 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 Aanvullende informatie installatiepagina. Vink op deze pagina het selectievakje Gebruik geen verklaringen op het hoogste niveau aan.

    Visual Studio geen selectievakjes op het hoogste niveau gebruiken

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

    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#, Geavanceerdevoor meer informatie.