Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Dica
Novo no desenvolvimento de software? Comece primeiro com os tutoriais de Introdução . Eles orientam você a escrever seus primeiros programas em C# antes de aprender sobre a estrutura do programa.
Experimentou em outro idioma? Talvez você queira dar uma olhada na seção Introdução para a sintaxe específica de C# e, em seguida, voltar aqui.
Você cria programas C# a partir desses blocos de construção principais: namespaces organizam seus tipos, tipos (classes, structs, interfaces, enums e delegados) definem o comportamento e os dados, e instruções e expressões executam trabalho em tempo de execução. A maneira como você estrutura o ponto de entrada depende de qual estilo de aplicativo você escolher.
Escolhendo seu estilo de aplicativo
Ao criar um programa em C#, faça duas escolhas independentes sobre como estruturá-lo:
-
Baseado em arquivo ou baseado em projeto?
- Um aplicativo baseado em arquivos é executado a partir de um único
.csarquivo, sem nenhum arquivo de projeto. - Um aplicativo baseado em projeto usa um
.csprojarquivo e pode abranger vários arquivos de origem.
- Um aplicativo baseado em arquivos é executado a partir de um único
-
Declarações de nível superior ou
Mainmétodo?- Instruções de nível superior permitem que você escreva código executável diretamente na parte superior de um arquivo.
- Um
Mainmétodo encapsula o ponto de entrada em um método estático explícito.
Aplicativos baseados em projeto e aplicativos baseados em arquivo dão suporte a qualquer estilo de ponto de entrada.
Aplicativos baseados em arquivo versus aplicativos baseados em projeto
A partir do C# 14 e do .NET 10, os aplicativos baseados em arquivo permitem executar um programa contido em um único *.cs arquivo sem um arquivo de projeto. Armazene o seguinte código em um arquivo nomeado hello-world.cs e execute-o com dotnet run hello-world.cs ou dotnet hello-world.cs:
#!/usr/bin/env dotnet
Console.WriteLine("Hello, World!");
Observação
A #! linha permite que os shells do Unix executem o arquivo diretamente. Em qualquer sistema Unix, defina a permissão execute (+x) e execute o arquivo na linha de comando.
Os aplicativos baseados em arquivo dão suporte a toda a sintaxe C# e podem usar diretivas de pré-processador para configurar o sistema de build. Use aplicativos baseados em arquivo para pequenos utilitários de linha de comando, protótipos e experimentos. Um aplicativo baseado em arquivo consiste em um único arquivo em um diretório:
my-app/
└── hello-world.cs
Os aplicativos baseados em projeto usam um .csproj arquivo, os comandosdotnet new da CLI do .NET, dotnet build e dotnet run o fluxo de trabalho. Escolha aplicativos baseados em projeto quando o programa abrange vários arquivos ou precisa de uma configuração de build refinada. Um aplicativo baseado em projeto inclui um arquivo de projeto junto com um ou mais arquivos de origem:
my-app/
├── my-app.csproj
├── Program.cs
├── Models/
│ └── Person.cs
└── Services/
└── GreetingService.cs
Se o aplicativo baseado em arquivo aumentar, você poderá convertê-lo facilmente em um aplicativo baseado em projeto. Execute dotnet project convert para gerar um arquivo de projeto do arquivo de origem existente.
Se você souber que seu aplicativo precisa de vários arquivos de origem desde o início, comece com um aplicativo baseado em projeto. Você evita a etapa de conversão e pode organizar seu código em arquivos separados imediatamente.
Declarações de nível superior versus o método Main
Usando instruções de nível superior, você pode escrever código executável diretamente em um arquivo sem encapsulá-lo em uma classe ou método. Esse estilo é o padrão quando você cria um novo aplicativo de console com dotnet new console. O exemplo a seguir mostra um programa C# moderno que usa instruções de nível superior:
Console.WriteLine("Hello, World!");
namespace YourNamespace
{
class YourClass
{
}
struct YourStruct
{
}
interface IYourInterface
{
}
delegate int YourDelegate();
enum YourEnum
{
}
}
Apenas um arquivo em um projeto pode ter instruções de nível superior e o ponto de entrada é a primeira linha de texto do programa nesse arquivo. À medida que você cria programas maiores, você inclui mais elementos de programa.
Você também pode definir um método estático Main explícito como o ponto de entrada do programa:
// A skeleton of a C# program using an explicit Main method
namespace YourNamespace;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
Ambos os estilos de ponto de entrada funcionam com aplicativos baseados em arquivo e baseados em projeto. Ambos os estilos dão suporte aos mesmos recursos.
Compilando e executando programas C#
C# é uma linguagem compilada . Para aplicativos baseados em projeto, use o comando para compilar arquivos de origem dotnet build em um pacote binário. Use dotnet run para compilar e executar em uma etapa. A dotnet CLI, incluída no SDK do .NET, fornece muitas ferramentas para criar, compilar e gerenciar projetos em C#.
Para aplicativos baseados em arquivo, dotnet run hello-world.cs compila e executa o único arquivo diretamente – nenhum arquivo de projeto é necessário.
Expressões e declarações
Se você seguiu os tutoriais Comece agora, já escreveu expressões e instruções. Cada linha de código que você digitou era uma ou outra (ou ambas). Agora vamos definir esses termos.
Expressões e instruções são os blocos de construção fundamentais de um programa C#. Uma expressão produz um valor. Uma instrução executa uma ação e geralmente termina com um ponto e vírgula.
Veja a seguir as expressões:
-
42(valor literal) -
x + y(operação aritmética) -
Math.Max(a, b)(chamada de método que produz um valor) -
condition ? trueValue : falseValue(expressão condicional) -
new Person("John")(criação de objeto)
Uma instrução executa uma ação. Instruções controlam o fluxo do programa, declaram variáveis ou invocam operações. A seguir estão as declarações:
-
int x;(declaração) -
int x = 42;(declaração com inicialização) -
Console.WriteLine("Hello");(instrução de chamada de método) -
if (condition) { /* code */ }(instrução condicional) -
return result;(instrução de retorno)
As instruções geralmente contêm expressões e as expressões podem aninhar dentro de outras expressões. Por exemplo, a instrução de declaração a seguir atribui f ao resultado de uma expressão de adição. Essa expressão de adição adiciona os resultados de duas expressões de chamada de método:
var maxResult = Math.Max(a, b) + Math.Max(c, d);
Para obter informações detalhadas sobre declarações, consulte Declarações. Para obter informações sobre membros com corpo de expressão, consulte membros com corpo de expressão.