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ą
Program
Main
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ć await
polecenia 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
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.
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).