Szablon aplikacji konsolowej języka C# generuje instrukcje najwyższego poziomu

Począwszy od platformy .NET 6, szablon projektu dla nowych aplikacji konsoli języka C# generuje następujący kod w pliku Program.cs :

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

Nowe dane wyjściowe używają ostatnich funkcji języka C#, które upraszczają kod, który należy napisać dla programu. W przypadku platformy .NET 5 i starszych wersji szablon aplikacji konsolowej generuje następujący 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!");
        }
    }
}

Te dwie formy reprezentują ten sam program. Oba są prawidłowe w języku C# 10.0. W przypadku korzystania z nowszej wersji wystarczy napisać treść Main metody. Kompilator generuje klasę Program z metodą punktu wejścia i umieszcza wszystkie instrukcje najwyższego poziomu w tej metodzie. Nazwa wygenerowanej metody to nie Main. Jest to szczegół implementacji, do którego kod nie może się odwoływać bezpośrednio. Nie musisz dołączać innych elementów programu, kompilator generuje je za Ciebie. Więcej informacji o kodzie generowanym przez kompilator można dowiedzieć się, gdy używasz instrukcji najwyższego poziomu w artykule na temat instrukcji najwyższego poziomu w sekcji Podstawy przewodnika języka C#.

Dostępne są dwie opcje pracy z samouczkami, które nie zostały zaktualizowane w celu korzystania z szablonów platformy .NET 6+:

  • Użyj nowego stylu programu, dodając nowe instrukcje najwyższego poziomu podczas dodawania funkcji.
  • Przekonwertuj nowy styl programu na starszy styl z klasą ProgramMain i metodą.

Jeśli chcesz użyć starych szablonów, zobacz Używanie starego stylu programu w dalszej części tego artykułu.

Używanie nowego stylu programu

Funkcje, które sprawiają, że nowy program jest prostszy, to instrukcje najwyższego poziomu, dyrektywy globalne using i dyrektywy niejawneusing.

Termin instrukcji najwyższego poziomu oznacza, że kompilator generuje elementy klasy i metody dla głównego programu. W globalnej przestrzeni nazw zadeklarowano wygenerowaną klasę i metodę punktu wejścia kompilatora. Możesz przyjrzeć się kodowi nowej aplikacji i wyobrazić sobie, że zawiera instrukcje wewnątrz Main metody wygenerowanej przez wcześniejsze szablony, ale w globalnej przestrzeni nazw.

Możesz dodać więcej instrukcji do programu, tak jak można dodać więcej instrukcji do Main metody w tradycyjnym stylu. Możesz uzyskać dostęp args (argumenty wiersza polecenia), użyć awaitpolecenia i ustawić kod zakończenia. Można nawet dodawać funkcje. Są one tworzone jako funkcje lokalne zagnieżdżone wewnątrz wygenerowanej metody punktu wejścia. Funkcje lokalne nie mogą zawierać żadnych modyfikatorów dostępu (na przykład public lub protected).

Obie instrukcje najwyższego poziomu i niejawne using dyrektywy upraszczają kod tworzący aplikację. Aby wykonać czynności opisane w istniejącym samouczku, dodaj wszystkie nowe instrukcje do pliku Program.cs wygenerowanego przez szablon. Można sobie wyobrazić, że zapisane instrukcje znajdują się między otwartymi i zamykającymi nawiasami klamrowymi w metodzie w Main instrukcjach samouczka.

Jeśli wolisz używać starszego formatu, możesz skopiować kod z drugiego przykładu w tym artykule i kontynuować samouczek tak jak poprzednio.

Więcej informacji na temat instrukcji najwyższego poziomu można dowiedzieć się w samouczku eksploracji instrukcji najwyższego poziomu.

Niejawne using dyrektywy

Termin dyrektywy niejawne using oznacza, że kompilator automatycznie dodaje zestaw using dyrektyw na podstawie typu projektu. W przypadku aplikacji konsolowych następujące dyrektywy są niejawnie zawarte w aplikacji:

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

Inne typy aplikacji obejmują więcej przestrzeni nazw, które są wspólne dla tych typów aplikacji.

Jeśli potrzebujesz using dyrektyw, które nie są dołączone niejawnie, możesz dodać je do pliku cs zawierającego instrukcje najwyższego poziomu lub do innych plików cs. W przypadku using dyrektyw potrzebnych we wszystkich plikach cs w aplikacji należy użyć dyrektyw globalnychusing.

Wyłączanie niejawnych using dyrektyw

Jeśli chcesz usunąć to zachowanie i ręcznie kontrolować wszystkie przestrzenie nazw w projekcie, dodaj <ImplicitUsings>disable</ImplicitUsings> go do pliku projektu w <PropertyGroup> elemecie, jak pokazano w poniższym przykładzie:

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

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

</Project>

Dyrektywy globalne using

Dyrektywa globalna using importuje przestrzeń nazw dla całej aplikacji zamiast jednego pliku. Te dyrektywy globalne można dodać, dodając <Using> element do pliku projektu lub dodając dyrektywę global using do pliku kodu.

Możesz również dodać <Using> element z atrybutem Remove do pliku projektu, aby usunąć konkretną niejawną using dyrektywę. Jeśli na przykład funkcja niejawnych using dyrektyw jest włączona za pomocą <ImplicitUsings>enable</ImplicitUsings>polecenia , dodanie następującego <Using> elementu spowoduje usunięcie System.Net.Http przestrzeni nazw z tych, które są niejawnie importowane:

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

Użyj starego stylu programu

Począwszy od zestawu .NET SDK 6.0.300, console szablon ma --use-program-main opcję. Służy do tworzenia projektu konsoli, który nie używa instrukcji najwyższego poziomu i ma metodę Main .

dotnet new console --use-program-main

Wygenerowana Program.cs wartość jest następująca:

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

Używanie starego stylu programu w programie Visual Studio

  1. Podczas tworzenia nowego projektu kroki konfiguracji zostaną wyświetlone na stronie Dodatkowe informacje . Na tej stronie zaznacz pole wyboru Nie używaj instrukcji najwyższego poziomu.

    Visual Studio do not use top-level statements check box

  2. Po utworzeniu Program.cs projektu zawartość będzie następująca:

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

Uwaga

Program Visual Studio zachowuje wartość opcji przy następnym utworzeniu projektu na podstawie tego samego szablonu, więc domyślnie podczas tworzenia projektu aplikacji konsolowej następnym razem pole wyboru "Nie używaj instrukcji najwyższego poziomu" zostanie zaznaczone. Zawartość Program.cs pliku może różnić się od stylu kodu zdefiniowanego w globalnych ustawieniach edytora EditorConfig tekstów programu Visual Studio lub pliku.

Aby uzyskać więcej informacji, zobacz Create portable, custom editor settings with EditorConfig and Options(Tworzenie przenośnych, niestandardowych ustawień edytora edytora i opcji), Text Editor (Edytor tekstu), C#, Advanced (Zaawansowane).