C#: Sintaxe básica
1. Estrutura do programa
Um programa clássico em C# consiste em diretivas using, um namespace, um class e um método Main.
- diretiva using: Importa um namespace para que você não precise escrever caminhos totalmente qualificados
- namespace: Um contêiner lógico para organizar o código e evitar conflitos de nomenclatura
- classe: O C# é uma linguagem orientada a objetos; todo o código deve estar dentro de uma classe
- Método principal: O ponto de entrada do programa, onde a execução começa
▶ Exemplo
using System;
namespace MyApp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
}
Hello, World!
2. Instruções e ponto-e-vírgula
Todas as instruções em C# devem terminar com um ponto-e-vírgula ;. O ponto-e-vírgula é um terminador de instrução que indica ao compilador onde uma instrução termina. A ausência do ponto-e-vírgula causará um erro de compilação.
▶ Exemplo
using System;
namespace StatementDemo
{
class Program
{
static void Main()
{
int x = 10;
int y = 20;
int sum = x + y;
Console.WriteLine(sum);
}
}
}
30
3. Blocos de código e chaves
Um bloco de código é delimitado por chaves { }, agrupando várias instruções em uma única unidade lógica. Espaços de nomes, classes, métodos, condicionais e loops exigem blocos de código. As chaves podem ser aninhadas.
namespace Outer
{
namespace Inner
{
class MyClass
{
void MyMethod()
{
if (true)
{
Console.WriteLine("nested block");
}
}
}
}
}
4. Indentação e estilo de código
Uma boa indentação facilita a leitura do código. A comunidade C# recomenda 4 espaços para a indentação. Existem dois estilos comuns de chaves:
- Estilo Allman: Chave de abertura em linha separada (comum em C#)
- Estilo K&R: Chave de abertura no final da linha anterior
class StyleA
{
void Method()
{
Console.WriteLine("Allman style");
}
}
class StyleB {
void Method() {
Console.WriteLine("K&R style");
}
}
Dica: O Visual Studio usa o estilo Allman por padrão. O mais importante é a consistência dentro de um projeto.
5. Saída do console
Console.Write e Console.WriteLine são usados para exibir texto no console:
- Console.Write: Exibe texto sem caractere de nova linha no final
- Console.WriteLine: Exibe um texto seguido de uma quebra de linha
▶ Exemplo
using System;
namespace ConsoleDemo
{
class Program
{
static void Main()
{
Console.Write("Hello");
Console.Write(" ");
Console.WriteLine("World");
Console.WriteLine("Second line");
}
}
}
Hello World
Second line
6. Caracteres de escape
Certos caracteres dentro de strings devem ser escapados com uma barra invertida \ para serem representados corretamente:
| Sequência de escape | Significado |
|---|---|
\n |
Nova linha |
\t |
Tab |
\\ |
Barra invertida |
\" |
Aspas duplas |
\' |
Aspa simples |
▶ Exemplo
using System;
namespace EscapeDemo
{
class Program
{
static void Main()
{
Console.WriteLine("Line1\nLine2");
Console.WriteLine("Name\tAge");
Console.WriteLine("Path: C:\\Users\\Doc");
Console.WriteLine("He said \"Hello\"");
}
}
}
Line1
Line2
Name Age
Path: C:\Users\Doc
He said "Hello"
Aviso: Se uma string contiver muitas barras invertidas (como em caminhos de arquivos), use uma string literal
@"...", na qual\não precisa mais ser escapada.
7. Comentários
Comentários são notas destinadas aos desenvolvedores e são ignorados pelo compilador. O C# suporta três tipos de comentários:
//: Comentário de uma única linha; tudo o que vier depois de//até o final da linha será ignorado/* */: Comentário de várias linhas; pode ocupar várias linhas///: Comentário de documentação em XML; pode gerar documentação da API
using System;
namespace CommentDemo
{
class Program
{
static void Main()
{
Console.WriteLine("hello");
Console.WriteLine("world");
/*
Console.WriteLine("skipped");
Console.WriteLine("also skipped");
*/
Console.WriteLine("end");
}
/// <summary>
/// Calculate the sum of two numbers
/// </summary>
static int Add(int a, int b)
{
return a + b;
}
}
}
hello
world
end
Dica: Os comentários de documentação em XML (
///) são comumente usados em APIs públicas. O Visual Studio exibe essas descrições quando o método é chamado.
8. Declarações de nível superior
A partir do C# 9, as instruções de nível superior permitem que você pule o código padrão namespace, class e Main, escrevendo a lógica diretamente no nível superior do arquivo. O compilador gera automaticamente o método de entrada.
▶ Exemplo
using System;
Console.WriteLine("Top-level statement!");
int result = 40 + 2;
Console.WriteLine($"The answer is {result}");
Top-level statement!
The answer is 42
Dica: As instruções de nível superior só podem ser usadas em um arquivo por projeto. Usá-las em vários arquivos causa um erro de compilação.
9. Espaços de nomes no âmbito do arquivo
A partir do C# 10, os namespaces com escopo de arquivo permitem usar namespace MyApp; em vez do namespace tradicional em estilo de bloco, reduzindo um nível de aninhamento:
namespace MyApp;
class Program
{
static void Main()
{
Console.WriteLine("File-scoped namespace");
}
}
Isso equivale a:
namespace MyApp
{
class Program
{
static void Main()
{
Console.WriteLine("File-scoped namespace");
}
}
}
Dica: Os namespaces no âmbito do arquivo tornam o código mais conciso e são recomendados para novos projetos.
❓ Perguntas Frequentes
P: O que acontece se eu esquecer um ponto-e-vírgula? R: O compilador exibirá um erro indicando a falta de um ponto-e-vírgula, e a localização do erro poderá apontar para a próxima linha. P: As diretivas de uso podem ser colocadas dentro de um namespace? R: Sim, mas geralmente são colocadas no início do arquivo para definir o escopo com mais clareza. P: Posso definir classes em um projeto que utilize instruções de nível superior? R: Sim, basta colocar as definições de classe após as instruções de nível superior. P: Posso definir vários namespaces em um namespace com escopo de arquivo? R: Não, cada arquivo só pode ter um namespace com escopo de arquivo.
📖 Resumo
- Um programa em C# é composto por diretivas de uso, namespace, classe e método Main
- Cada instrução deve terminar com um ponto-e-vírgula
- Os blocos de código são delimitados por chaves e podem ser aninhados
- O Console.Write não insere uma quebra de linha; o Console.WriteLine, sim
- Os caracteres de escape são precedidos por uma barra invertida; as sequências de caracteres literais
@"..."evitam o uso de escape - Três tipos de comentário: de uma linha
//, de várias linhas/* */, documento XML/// - As instruções de nível superior (C# 9+) simplificam o código do ponto de entrada
- Os namespaces com escopo de arquivo (C# 10+) reduzem os níveis de aninhamento
📝 Exercícios
- Escreva um programa de console que utilize Console.Write e Console.WriteLine para exibir seu nome e sua idade
- Use caracteres de escape para exibir três linhas de texto em uma única instrução Console.WriteLine
- Reescreva uma estrutura clássica de programa utilizando instruções de nível superior
- Adicione comentários de documentação em XML a um método, incluindo as tags
<summary>e<param>