O modelo de aplicativo de console do C# gera instruções de nível superior
A partir do .NET 6, o modelo de projeto para novos aplicativos de console C# gera o seguinte código no arquivo Program.cs:
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
A nova saída usa recursos recentes do C# que simplificam o código que você precisa gravar para um programa. Para o .NET 5 e versões anteriores, o modelo de aplicativo de console gera o seguinte código:
using System;
namespace MyApp
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
No código anterior, o namespace real depende do nome do projeto.
Esses dois formulários representam o mesmo programa. Ambos são válidos em C#. Ao usar a versão mais recente, você só precisa gravar o corpo do método Main
. O compilador gera uma classe Program
com um método de ponto de entrada e coloca todas as instruções de nível superior nesse método. O nome do método gerado não é Main
, é um detalhe de implementação que seu código não pode referenciar diretamente. Você não precisa incluir os outros elementos do programa, o compilador os gera para você. Você pode saber mais sobre o código gerado pelo compilador ao usar instruções de nível superior no artigo sobre instruções de nível superior na seção de conceitos básicos do Guia do C#.
Você tem duas opções para trabalhar com tutoriais que não são atualizados para usar modelos do .NET 6+:
- Use o novo estilo de programa, adicionando novas instruções de nível superior à medida que você adiciona recursos.
- Converta o novo estilo de programa no estilo mais antigo, com uma classe
Program
e um métodoMain
.
Se você quiser usar os modelos antigos, confira Usar o antigo estilo de programa mais adiante neste artigo.
Usar o novo estilo de programa
Os recursos que tornam o novo programa mais simples são instruções de nível superior, diretivas de using
globaise diretivas de using
implícitas.
O termo instruções de nível superior significa que o compilador gera elementos de classe e de método para seu programa principal. A classe gerada pelo compilador e o método de ponto de entrada são declarados no namespace global. Você pode examinar o código do novo aplicativo e imaginar que ele contém as instruções dentro do método Main
gerado por modelos anteriores, mas no namespace global.
Você pode adicionar mais instruções ao programa, assim como pode adicionar mais instruções ao método Main
no estilo tradicional. Você pode acessar args
(argumentos de linha de comando), usar await
e definir o código de saída. Você pode até mesmo adicionar funções. Elas são criadas como funções locais aninhadas dentro do método de ponto de entrada gerado. As funções locais não podem incluir modificadores de acesso (por exemplo, public
ou protected
).
As instruções de nível superior e as diretivas using
implícitas simplificam o código que compõe seu aplicativo. Para seguir um tutorial existente, adicione novas instruções ao arquivo Program.cs gerado pelo modelo. Você pode imaginar que as instruções que você escreve estão entre as chaves de abertura e fechamento no método Main
nas instruções do tutorial.
Se preferir usar o formato mais antigo, copie o código do segundo exemplo neste artigo e continue o tutorial como antes.
Você pode saber mais sobre as instruções de nível superior explorando o tutorial sobre esse assunto.
Diretivas using
implícitas
O termo diretivas using
implícitas significa que o compilador automaticamente adiciona um conjunto de diretivas using
com base no tipo de projeto. Para aplicativos de console, as seguintes diretivas são incluídas implicitamente no aplicativo:
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
Outros tipos de aplicativo incluem mais namespaces comuns para esses tipos de aplicativo.
Se precisar de diretivas using
que não estão incluídas implicitamente, você poderá adicioná-las ao arquivo .cs que contém declarações de nível superior ou a outros arquivos .cs. Para diretivas using
, necessárias em todos os arquivos .cs de um aplicativo, use as diretivas using
globais.
Desabilitar diretivas using
implícitas
Se você quiser remover esse comportamento e controlar manualmente todos os namespaces em seu projeto, adicione <ImplicitUsings>disable</ImplicitUsings>
ao arquivo de projeto no elemento <PropertyGroup>
, conforme mostrado no exemplo a seguir:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<ImplicitUsings>disable</ImplicitUsings>
</PropertyGroup>
</Project>
Diretivas using
globais
Uma diretiva global using
importa um namespace para todo o aplicativo em vez de um único arquivo. Essas diretivas globais podem ser adicionadas adicionando um item <Using>
ao arquivo de projeto ou adicionando a diretiva global using
a um arquivo de código.
Você também pode adicionar um item <Using>
com um atributo Remove
ao arquivo de projeto para remover uma diretiva using
implícita específica. Por exemplo, se o recurso de diretivas using
implícitas estiver ativado com <ImplicitUsings>enable</ImplicitUsings>
, adicionar o seguinte item <Using>
removerá o namespace System.Net.Http
daqueles que tiverem sido importados implicitamente:
<ItemGroup>
<Using Remove="System.Net.Http" />
</ItemGroup>
Usar o estilo de programa antigo
Começando com o SDK do .NET 6.0.300, o modelo de console
tem uma opção --use-program-main
. Use-o para criar um projeto de console que não use instruções de nível superior e tenha um método Main
.
dotnet new console --use-program-main
O Program.cs
gerado é o seguinte:
namespace MyProject;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
Usar o estilo de programa antigo no Visual Studio
Ao criar um novo projeto, as etapas de configuração levam até a página de configuração Informações adicionais. Nesta página, marque a caixa de seleção Não usar instruções de nível superior.
Depois que o projeto é criado, o conteúdo do
Program.cs
é o seguinte:namespace MyProject; class Program { static void Main(string[] args) { Console.WriteLine("Hello, World!"); } }
Nota
O Visual Studio preserva o valor das opções na próxima vez que você criar o projeto com base no mesmo modelo, portanto, por padrão, ao criar o projeto de Aplicativo de Console na próxima vez, a caixa de seleção "Não usar instruções de nível superior" será marcada.
O conteúdo do arquivo Program.cs
pode ser diferente para corresponder ao estilo de código definido nas configurações globais do editor de texto do Visual Studio ou no arquivo EditorConfig
.
Para obter mais informações, consulte Criar configurações de editor portátil e personalizadas com o EditorConfig e Options, Editor de Texto, C#, Advanced.