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 using
oraz 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
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.
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.