Udostępnij za pośrednictwem


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

W poprzednim kodzie rzeczywista przestrzeń nazw zależy od nazwy projektu.

Te dwie formy reprezentują ten sam program. Oba są prawidłowe w języku C#. W przypadku korzystania z nowszej wersji wystarczy napisać treść metody Main. Kompilator generuje klasę Program z metodą punktu wejścia i umieszcza wszystkie instrukcje najwyższego poziomu w tej metodzie. Nazwa wygenerowanej metody nie jest 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 dotyczącym instrukcji najwyższego poziomu w sekcji Podstawy przewodnika języka C#.

Dostępne są dwie opcje pracy z samouczkami, które nie są aktualizowane 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ą Program i metodą Main.

Jeśli chcesz użyć starych szablonów, zobacz Użyj 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, globalne dyrektywy usingoraz niejawne dyrektywy using.

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 metody Main 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 metody Main w tradycyjnym stylu. Możesz mieć dostęp do args (argumentów wiersza polecenia), korzystać z await, 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).

Zarówno instrukcje najwyższego poziomu, jak i niejawne dyrektywy using 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 Main w 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 artykule eksploracji samouczka dotyczącego instrukcji najwyższego poziomu .

Niejawne dyrektywy using

Termin niejawnych dyrektyw using oznacza, że kompilator automatycznie dodaje zestaw dyrektyw using 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 dyrektyw using, które są potrzebne we wszystkich plikach .cs w aplikacji, użyj globalnych dyrektyw using.

Wyłącz niejawne dyrektywy using

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

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

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

</Project>

Globalne dyrektywy using

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

Możesz również dodać element <Using> z atrybutem Remove do pliku projektu, aby usunąć konkretną dyrektywę niejawną using. Jeśli na przykład funkcja niejawnych dyrektyw using jest włączona z <ImplicitUsings>enable</ImplicitUsings>, dodanie następującego elementu <Using> usuwa przestrzeń nazw System.Net.Http 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, szablon console ma opcję --use-program-main. 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

Wygenerowany Program.cs jest następujący:

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 przechodzą do strony Dodatkowe informacje konfiguracji. Na tej stronie zaznacz pole wyboru Nie używaj instrukcji najwyższego poziomu.

    program Visual Studio nie używa instrukcji najwyższego poziomu, pole wyboru

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

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

Notatka

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ść pliku Program.cs może się różnić, aby pasowała do stylu kodu zdefiniowanego w globalnych ustawieniach edytora kodu Visual Studio lub w pliku EditorConfig.

Aby uzyskać więcej informacji, zobacz Tworzenie przenośnych, niestandardowych ustawień edytora za pomocą EditorConfig oraz Opcje, Edytor tekstu, C#, Zaawansowane.