C# (pronuncia-se "C sharp") é uma linguagem de programação de uso geral projetada na Microsoft por uma equipe liderada por Anders Hejlsberg, lançada pela primeira vez em 2002. Ela tem tipagem estática (toda variável tem um tipo que o compilador verifica antes de o programa executar), é orientada a objetos (o código é organizado em classes) e gerenciada (um garbage collector libera a memória para você). O C# moderno também empresta muito da programação funcional: lambdas, consultas LINQ, pattern matching e records imutáveis.
Aqui está um programa C# completo. Clique em Run:
Saída:
Hello, Ada! It is 2026.
Para que C# é usado
C# é uma linguagem de uso geral, então aparece na maioria dos tipos de software, mas algumas áreas concentram a maior parte do uso:
- Jogos. A Unity, um dos motores de jogos mais usados, é programada em C#. O Godot também oferece suporte.
- Backends web. O ASP.NET Core é o framework web do .NET para APIs, sites e apps em tempo real. Ele está entre os frameworks web mais rápidos do mercado em benchmarks públicos.
- Apps desktop. WPF e Windows Forms no Windows, .NET MAUI e Avalonia em várias plataformas.
- Nuvem e serviços. Azure Functions, workers em segundo plano, microsserviços em contêineres.
- Ferramentas e automação. Ferramentas de linha de comando, scripts de build, processamento de dados.
Ela é especialmente comum em empresas que usam tecnologia Microsoft e em estúdios de jogos. Apps mobile são possíveis com .NET MAUI (o sucessor do Xamarin), mas é um nicho menor que Kotlin ou Swift.
C# e .NET não são a mesma coisa
C# é a linguagem. O .NET é a plataforma que a executa, e tem três partes:
- O runtime (CLR). O compilador de C# não produz código de máquina. Ele produz Intermediate Language (IL), guardada em arquivos
.dllou.exe. Quando o programa executa, o Common Language Runtime compila essa IL para código nativo just in time (JIT), gerencia a memória com um garbage collector e garante a segurança de tipos. - A biblioteca de classes base. Coleções, acesso a arquivos, rede, texto, datas, threads: tudo o que está em
System.*. - O SDK. O comando
dotnet, que cria, compila, testa e executa projetos.
Outras linguagens compilam para a mesma IL (F#, Visual Basic), e é por isso que um programa C# pode usar uma biblioteca escrita em F#.
Existem duas gerações da plataforma. O .NET Framework (do 1.0, em 2002, ao 4.8.1) só roda no Windows e ainda executa muitas aplicações antigas. O .NET (chamado de .NET Core até a versão 5) é o sucessor open source e multiplataforma, que roda em Windows, Linux e macOS. Projetos novos usam o .NET; versões de número par, como .NET 8 e .NET 10, têm três anos de suporte de longo prazo.
Como um programa C# é estruturado
Um programa C# é feito de tipos (classes, structs, interfaces, enums, records) que contêm membros (campos, propriedades, métodos). A execução começa em um método static chamado Main. Namespaces agrupam tipos relacionados, e diretivas using permitem se referir a eles por nomes curtos.
Saída:
Maya: 21.00
Leo: 13.00
Algumas coisas já aparecem aqui: Order é uma classe com duas propriedades (Customer, Total), um construtor e um método. decimal é o tipo para dinheiro, e o sufixo m marca um literal decimal. var deixa o compilador inferir o tipo de uma variável local, e List<Order> é uma coleção genérica que só aceita objetos Order. O {order.Total:F2} dentro de $"..." formata um número com duas casas decimais.
Em um projeto real, cada classe normalmente fica em seu próprio arquivo, e os arquivos são compilados juntos em um assembly. Veja classes e objetos para os detalhes.
Tipagem estática na prática
O compilador conhece o tipo de cada expressão, então uma grande classe de erros nunca chega a um programa em execução. Atribuir uma string a um int, chamar um método que não existe ou passar argumentos na ordem errada falha em tempo de compilação, com um erro que aponta a linha.
Saída:
29.97
45
Os tipos também movem o editor: autocompletar, renomear e "encontrar todas as referências" são exatos em C# porque as ferramentas leem a mesma informação de tipos que o compilador.
Versões do C# e o que elas adicionaram
Desde o C# 9, em 2020, uma versão nova sai todo mês de novembro junto com uma nova versão do .NET; antes disso, as versões saíam a cada dois ou três anos. Cada versão é projetada para que o código existente continue compilando, e as raras exceções (como field virar palavra-chave dentro de acessores de propriedade no C# 14) são documentadas como mudanças incompatíveis, então um programa escrito para o C# 2 quase sempre compila sem mudanças hoje.
| Versão | Ano | Principais adições |
|---|---|---|
| C# 2 | 2005 | Genéricos, tipos de valor anuláveis (int?), iteradores (yield) |
| C# 3 | 2007 | LINQ, expressões lambda, var, inicializadores de objeto, métodos de extensão |
| C# 4 | 2010 | dynamic, parâmetros opcionais e nomeados |
| C# 5 | 2012 | async e await |
| C# 6 | 2015 | Interpolação de strings $"...", nameof, operador condicional nulo ?. |
| C# 7 | 2017 | Tuplas, out var, pattern matching com is, separadores de dígitos |
| C# 8 | 2019 | Tipos de referência anuláveis, expressões switch, intervalos s[1..4], ??=, streams assíncronos |
| C# 9 | 2020 | Records, acessores init, instruções de nível superior, new() com tipo de destino |
| C# 10 | 2021 | Global usings, namespaces com escopo de arquivo, record structs |
| C# 11 | 2022 | Literais de string brutos """, membros required, list patterns |
| C# 12 | 2023 | Construtores primários para classes, expressões de coleção [1, 2, 3] |
| C# 13 | 2024 | Coleções params, o tipo System.Threading.Lock |
| C# 14 | 2025 | Membros de extensão, a palavra-chave field em propriedades |
As versões mais novas, em geral, removem cerimônia. Este programa em C# 9 ou posterior usa instruções de nível superior (sem class Program, sem Main), um record e uma expressão switch:
// C# 9 and later, in a .NET 6+ project (implicit usings import System)
var order = new Order("Maya", 21.00m);
Console.WriteLine(Shipping(order));
static string Shipping(Order o) => o.Total switch
{
>= 50m => "free shipping",
>= 20m => "standard shipping",
_ => "shipping fee applies"
};
record Order(string Customer, decimal Total);
A mesma lógica no estilo explícito mais antigo, que compila no C# 6 e em todas as versões posteriores:
Saída:
standard shipping
As duas formas são C# válido. Você vai encontrar o estilo explícito mais antigo em código existente, tutoriais e projetos Unity, e o estilo mais curto em projetos .NET novos.
LINQ: consultando dados na própria linguagem
O LINQ (Language Integrated Query, C# 3) é um dos recursos que as pessoas citam quando explicam por que gostam de C#. Ele permite filtrar, ordenar, agrupar e transformar qualquer coleção com uma cadeia de métodos:
Saída:
95, 91, 88, 72
Average: 78.0
Best: 95
A mesma sintaxe funciona em listas na memória, em tabelas de banco de dados por meio do Entity Framework e em XML. Mais em LINQ.
C# é uma boa primeira linguagem?
C# pede mais logo de início que Python: você declara tipos, termina instruções com ponto e vírgula e coloca o código dentro de classes. Em troca, o compilador pega os erros cedo, as ferramentas (Visual Studio, VS Code, Rider) são excelentes e os conceitos se transferem diretamente para Java, TypeScript, Kotlin e C++. Se você quer criar jogos na Unity ou trabalhar em uma empresa .NET, é a escolha óbvia. Se o seu objetivo é análise de dados ou machine learning, Python tem o ecossistema maior.
Para começar, instale o .NET SDK e execute dotnet new console, ou comece pelo Hello World e execute os exemplos destas páginas diretamente.
Perguntas frequentes
O que é C#?
C# (pronuncia-se "C sharp") é uma linguagem de programação de uso geral, orientada a objetos e com tipagem estática, criada na Microsoft e lançada pela primeira vez em 2002. O código-fonte é compilado para uma linguagem intermediária que o runtime do .NET transforma em código de máquina, com memória gerenciada por garbage collector. Ela é usada em backends web, jogos na Unity, apps desktop, serviços em nuvem e ferramentas.
C# é a mesma coisa que .NET?
Não. C# é a linguagem; .NET é a plataforma em que ela roda: o runtime (CLR), a biblioteca de classes base (System.Collections.Generic, System.IO e assim por diante) e as ferramentas do SDK. F# e Visual Basic também rodam no .NET, e uma versão de C# normalmente sai junto com uma versão do .NET (C# 12 com .NET 8, por exemplo).
Para que serve C#?
APIs e sites web com ASP.NET Core, jogos com a Unity (a linguagem de script dela é C#), apps desktop para Windows com WPF e WinForms, apps multiplataforma com .NET MAUI, serviços em nuvem e Azure Functions, e ferramentas de linha de comando. Ela é comum em software corporativo e em estúdios de jogos.
C# é difícil de aprender?
É uma primeira linguagem de dificuldade moderada. A sintaxe é no estilo C e mais rígida que a do Python, já que toda variável tem um tipo que o compilador verifica, mas a memória é gerenciada para você e as mensagens de erro são claras. A maioria dos iniciantes consegue escrever programas de console úteis em poucas semanas de prática.
Ainda vale a pena aprender C#?
Sim. C# aparece sempre entre as linguagens mais usadas nas pesquisas com desenvolvedores, o .NET é open source e multiplataforma, e a linguagem ganha uma versão nova todo mês de novembro. É a escolha prática se você quer fazer jogos na Unity ou trabalhar em empresas construídas sobre tecnologia Microsoft.