Шаблон консольного приложения C# создает инструкции верхнего уровня
Начиная с .NET 6 шаблон проекта для новых консольных приложений C# создает следующий код в файле Program.cs :
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
В новых выходных данных используются последние функции C#, упрощающие код, который необходимо написать для программы. Для .NET 5 и более ранних версий шаблон консольного приложения создает следующий код:
using System;
namespace MyApp // Note: actual namespace depends on the project name.
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
Эти две формы представляют одну и ту же программу. Оба значения допустимы в C# 10.0. При использовании более новой версии необходимо только написать текст метода Main
. Компилятор создает класс с методом точки входа и помещает Program
все инструкции верхнего уровня в этот метод. Имя созданного метода не Main
является именем, это сведения о реализации, на которые код не может ссылаться напрямую. Вам не нужно включать другие элементы программы, компилятор создает их для вас. Дополнительные сведения о коде компилятор создает при использовании инструкций верхнего уровня в статье по операторам верхнего уровня в разделе "Основы руководства по C#".
Существует два варианта работы с учебниками, которые не были обновлены для использования шаблонов .NET 6+:
- Используйте новый стиль программы, добавляя новые операторы верхнего уровня по мере добавления компонентов.
- Преобразование нового стиля программы в старый с помощью класса
Program
и методаMain
.
Если вы хотите использовать старые шаблоны, см . статью "Использовать старый стиль программы" далее в этой статье.
Использовать новый стиль программы
Функции, упрощающие новую программу, — это операторы верхнего уровня, глобальные директивы using
и неявные директивы using
.
Термин "операторы верхнего уровня" означает, что компилятор создает элементы класса и метода для основной программы. В глобальном пространстве имен объявлены созданный компилятором класс и метод точки входа. Вы можете просмотреть код для нового приложения и представить, что он содержит инструкции внутри метода, созданного Main
более ранними шаблонами, но в глобальном пространстве имен.
В программу можно добавить дополнительные операторы, так же как и дополнительные операторы в метод Main
в традиционном стиле. Вы можете получить доступ args
(аргументы командной строки), использовать await
и задать код выхода. Можно даже добавлять функции. Они создаются как локальные функции, вложенные в созданный метод точки входа. Локальные функции не могут включать модификаторы доступа (например, public
или protected
).
Операторы верхнего уровня и неявные директивы using
упрощают код вашего приложения. Для изучения существующего учебника добавьте новые операторы в файл Program.cs, созданный шаблоном. Вы можете представить, что написанные вами операторы находятся между открывающей и закрывающей фигурными скобками в методе Main
в инструкциях учебника.
Если вы предпочитаете использовать старый формат, скопируйте код из второго примера, приведенного в этой статье, и продолжайте работу с учебником.
Дополнительные сведения см. в руководстве Операторы верхнего уровня.
Неявные директивы using
Термин неявные using
директивы означает, что компилятор автоматически добавляет набор using
директив на основе типа проекта. Для консольных приложений следующие директивы неявно включаются в приложение:
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
Другие типы приложений включают в себя дополнительные пространства имен, общие для этих типов приложений.
Если вам нужны директивы using
, которые не включены неявно, вы можете добавить их в файл .cs, содержащий операторы верхнего уровня, или другие файлы .cs. Для директив using
, которые вам нужны во всех файлах .cs в приложении, используйте глобальные директивы using
.
Отключение неявных директив using
Если вы хотите удалить это поведение и вручную управлять всеми пространствами имен в проекте, добавьте <ImplicitUsings>disable</ImplicitUsings>
в файл проекта в элемент, как показано в <PropertyGroup>
следующем примере:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<ImplicitUsings>disable</ImplicitUsings>
</PropertyGroup>
</Project>
Глобальные директивы using
Глобальная директива using
импортирует пространство имен для всего приложения, а не отдельного файла. Эти глобальные директивы можно добавить, включив элемент <Using>
в файл проекта или директиву global using
в файл кода.
Вы также можете добавить <Using>
элемент с атрибутом Remove
в файл проекта, чтобы удалить определенную неявную using
директиву. Например, если функция неявных using
директив включена, <ImplicitUsings>enable</ImplicitUsings>
добавление следующего <Using>
элемента удаляет System.Net.Http
пространство имен из неявно импортированных:
<ItemGroup>
<Using Remove="System.Net.Http" />
</ItemGroup>
Использование старого стиля программы
Начиная с пакета SDK для .NET 6.0.300 шаблон console
имеет --use-program-main
параметр. Используйте его для создания консольного проекта, который не использует операторы верхнего уровня и имеет Main
метод.
dotnet new console --use-program-main
Созданный код Program.cs
выглядит следующим образом:
namespace MyProject;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
Использование старого стиля программы в Visual Studio
При создании нового проекта вы перейдете на страницу настройки Дополнительные сведения. На этой странице выберите операторы верхнего уровня проверка.
После создания
Program.cs
проекта содержимое выглядит следующим образом:namespace MyProject; class Program { static void Main(string[] args) { Console.WriteLine("Hello, World!"); } }
Примечание.
Visual Studio сохраняет значение для параметров при следующем создании проекта на основе того же шаблона, поэтому по умолчанию при создании проекта консольного приложения в следующий раз поле "Не использовать операторы верхнего уровня" проверка будет проверка.
Содержимое Program.cs
файла может отличаться от стиля кода, определенного в параметрах глобального текстового редактора Visual Studio или EditorConfig
в файле.
Дополнительные сведения см. в статье "Создание переносимых, настраиваемых параметров редактора с помощью EditorConfig и Options", "Текстовый редактор", "C#", "Дополнительно".