C# O que é C#
Antes de escrever o primeiro programa, vale entender o que você está aprendendo. Nesta aula você descobre o que é programar, o que é uma linguagem de programação, o que o C# tem de especial, de onde ele veio e onde ele é usado hoje. Ainda não tem código para decorar: só três programinhas para rodar e mexer, para você ver que o C# já funciona aqui no navegador.
- O que é um programa, uma linguagem de programação e um compilador.
- O que é o C# e o que é o .NET, que trabalha por baixo dele.
- O que quer dizer "o compilador confere os tipos" e por que isso ajuda.
- A história do C#, de 2000 até o C# 14, de 2025.
- Onde o C# é usado: sites, jogos, programas de computador e celular.
- As diferenças entre C#, C, Java e Python.
Primeiro: o que é programar?
Um computador é uma máquina muito rápida e muito obediente, mas que não sabe fazer nada sozinha. Ele precisa de instruções exatas, uma por uma. Um programa é essa lista de instruções, como uma receita: "pegue duas notas, some, divida por dois, mostre o resultado na tela".
O problema é que o processador do computador só entende números (a linguagem de máquina), e escrever programas em números é quase impossível para gente. Por isso existem as linguagens de programação: um meio-termo entre o português e a linguagem da máquina, com palavras em inglês e regras exatas. Você escreve o programa nessa linguagem, e um programa especial, o compilador, traduz o seu texto para algo que o computador consegue executar.
| Na cozinha | Na programação | No C# |
|---|---|---|
| A receita escrita em português | O código-fonte: o texto que você escreve | um arquivo ola.cs |
| O tradutor que passa a receita para outra língua | O compilador | o Roslyn, que vem dentro do comando dotnet |
| A cozinheira que lê a receita traduzida e faz o bolo | Quem executa o programa | o .NET (aula .NET: SDK, Runtime e CLR) |
| O bolo na mesa | O resultado: o que aparece na tela | Olá, mundo! |
Programar, então, é escrever receitas tão claras que nem uma máquina consegue entender errado. No começo, parece que o computador é chato ("faltou um ponto e vírgula!"); com o tempo, você percebe que ele só faz exatamente o que você mandou.
O que é o C#
O C# (fala-se "cê-xárp"; em inglês, C sharp) é uma linguagem de programação de uso geral: serve para quase qualquer tipo de programa. Ela foi criada pela Microsoft, mas hoje é livre: o compilador e o .NET têm código aberto, são gratuitos e rodam em Linux, Windows e macOS. O nome vem da música: o sinal # é o "sustenido", que sobe a nota meio tom, e "C sharp" é o nome em inglês da nota dó sustenido. É como dizer "o C, um tom acima". Muita gente também repara que o # parece quatro sinais de + juntos, uma piada com o nome do C++.
Três características marcam o C#. Você vai entender cada uma com calma ao longo do guia; por enquanto, só guarde as palavras:
- Compilada
- Antes de rodar, o programa inteiro passa pelo compilador, que confere tudo. Se houver um erro de escrita em qualquer linha, nada roda, e o compilador diz onde está o problema. É diferente do Python, que lê e executa uma linha de cada vez e só descobre o erro quando chega nela.
- Com tipos
- Cada informação tem um tipo: texto (
string), número inteiro (int), dinheiro (decimal)… E o compilador não deixa misturar: guardar um texto onde deveria ir um número é erro antes mesmo de rodar. Os programadores dizem que o C# tem tipagem estática. - Gerenciada
- O programa roda dentro do .NET, que cuida da memória para você: ele separa o espaço que o programa precisa e, quando uma informação não é mais usada, recolhe esse espaço sozinho (o coletor de lixo). Em C, você faz isso à mão, e esquecer causa erros graves.
Veja as duas primeiras características num programa de verdade. Ele guarda o nome, a idade e o saldo da Ana, cada um com o seu tipo, e mostra tudo numa frase:
string nome = "Ana";
int idade = 29;
decimal saldo = 1234.50m;
Console.WriteLine($"{nome} tem {idade} anos e R$ {saldo} na conta.");
$ dotnet run tipos.cs Ana tem 29 anos e R$ 1234,50 na conta. « no código, 1234.50 com ponto; na tela, com vírgula
Não se preocupe com cada símbolo agora (o m depois do número, o $ antes das aspas): as aulas Variáveis, float, double e decimal e Interpolação explicam tudo. Repare só numa coisa: no código, o número se escreve com ponto (1234.50), como em inglês; na tela, ele sai com vírgula, porque o computador da Ana está em português. Agora, o que acontece se alguém tentar guardar um texto na idade?
Missão: rode e leia o erro: o compilador não aceita guardar o texto "trinta" numa variável do tipo int (número inteiro). Conserte a linha 3 para guardar o número 30, sem aspas, e rode de novo. A saída deve ser Ana tem 30 anos.
string nome = "Ana";
int idade = 29;
idade = "trinta";
Console.WriteLine($"{nome} tem {idade} anos.");
string nome = "Ana";
int idade = 29;
idade = 30;
Console.WriteLine($"{nome} tem {idade} anos.");
No terminal, o mesmo erro aparece assim:
$ dotnet run idade.cs /home/ana/cs/idade.cs(3,9): error CS0029: Não é possível converter implicitamente tipo "string" em "int" Ocorreu uma falha no build. Corrija os erros de build e execute novamente.
"Não é possível converter implicitamente" quer dizer "não dá para transformar sozinho um texto num número". O (3,9) é a linha 3, coluna 9, onde começa o "trinta". Esse é o trabalho do compilador: achar o erro antes de o programa rodar, enquanto ele ainda é fácil de consertar. Num sistema de banco, é muito melhor que o erro apareça na tela do programador do que no extrato de um cliente.
Um pouco de história
No fim dos anos 1990, a Microsoft queria uma linguagem moderna para a sua nova plataforma de programação, o .NET. Ela chamou o engenheiro dinamarquês Anders Hejlsberg, que já tinha criado o Turbo Pascal e o Delphi (e que, anos depois, criaria também o TypeScript). A equipe dele desenhou o C#, apresentado em 2000.
| Ano | O que aconteceu |
|---|---|
| 2000 | A Microsoft apresenta o C# e o .NET. |
| 2002 | Sai o C# 1.0, junto com o .NET Framework 1.0. Ele só roda no Windows. Pouco antes, em dezembro de 2001, a linguagem tinha virado um padrão aberto (ECMA-334; depois ISO, em 2003). |
| 2004 | Sai o Mono, uma versão livre do .NET feita fora da Microsoft, que leva o C# para o Linux e o macOS. |
| 2005 a 2012 | O C# ganha os recursos que o tornaram famoso: tipos genéricos (C# 2), o LINQ para consultar listas (C# 3), e o async/await para esperar sem travar (C# 5). |
| 2014 | A Microsoft abre o código do compilador (o Roslyn) e começa um .NET novo, livre e multiplataforma. |
| 2016 | Sai o .NET Core 1.0: o .NET oficial da Microsoft passa a rodar no Linux e no macOS. No mesmo ano, a Microsoft compra a Xamarin, a empresa que cuidava do Mono. |
| 2020 | O .NET 5 junta tudo num .NET só. O nome "Core" sai, e começa o ritmo de uma versão nova por ano, sempre em novembro. |
| 2025 | Saem o C# 14 e o .NET 10, as versões que este guia ensina. |
A aula Versões do C# e do .NET conta o que cada versão trouxe e explica a diferença entre as versões de suporte longo e curto. O antigo .NET Framework, só para Windows, ainda existe e ainda roda muito programa antigo, mas não ganha mais novidades. Quando você ler "C#" num tutorial de 2010, lembre que ele foi escrito para aquele mundo.
Missão: a linha do tempo da Ana parou em 2020. Acrescente uma quarta linha, igual às outras, que mostre 2025: sai o C# 14 com o .NET 10. Copie o jeito das linhas de cima: Console.WriteLine(, o texto entre aspas, );.
Console.WriteLine("2002: sai o C# 1.0, só para Windows");
Console.WriteLine("2016: o .NET Core roda no Linux e no macOS");
Console.WriteLine("2020: o .NET 5 junta tudo num .NET só");
Console.WriteLine("2002: sai o C# 1.0, só para Windows");
Console.WriteLine("2016: o .NET Core roda no Linux e no macOS");
Console.WriteLine("2020: o .NET 5 junta tudo num .NET só");
Console.WriteLine("2025: sai o C# 14 com o .NET 10");
As linhas aparecem na mesma ordem em que estão no código: o programa roda de cima para baixo, uma instrução depois da outra.
Onde o C# está hoje
O C# está entre as linguagens mais usadas do mundo, principalmente em empresas. Alguns lugares onde ele aparece:
| Área | Com o quê | Exemplos |
|---|---|---|
| Sites e sistemas na internet | ASP.NET Core | Lojas virtuais, sistemas de bancos, de hospitais e do governo; as APIs que os aplicativos de celular consultam. |
| Jogos | Unity e Godot | No Unity, um dos motores de jogos mais usados do mundo (principalmente em jogos de celular), toda a lógica do jogo é escrita em C#. O Godot, um motor livre, também aceita C#. |
| Programas de computador | WPF, WinForms, Avalonia | Programas de empresas, sistemas de caixa de loja, ferramentas do Windows. |
| Celular e computador ao mesmo tempo | .NET MAUI | Um código só para Android, iPhone, Windows e macOS. |
| Nuvem e automação | Azure, AWS, contêineres | Serviços que rodam em servidores Linux, robôs que processam arquivos à noite. |
Este guia não ensina nenhuma dessas ferramentas: ele ensina a linguagem, que é a base de todas. Quem termina o Nível 3 consegue abrir o tutorial do Unity ou do ASP.NET Core e entender o código.
Vantagens e cuidados
| Vantagem | Por quê |
|---|---|
| O compilador pega muitos erros cedo | Tipos conferidos antes de rodar, avisos sobre variáveis esquecidas e sobre null (aula Referências Anuláveis). |
| A memória é cuidada pelo .NET | Você não precisa liberar memória à mão, como em C. |
| Biblioteca enorme | Arquivos, datas, JSON, internet, criptografia, listas: vem tudo pronto no .NET. |
| Ferramentas muito boas | Editores que completam o código e mostram o erro enquanto você digita (aula Editores e IDEs). |
| Rápido | O .NET transforma o programa em código de máquina enquanto ele roda, e o resultado fica perto da velocidade do C++ em muitas tarefas. |
| Mercado de trabalho | Muito usado em empresas, bancos e estúdios de jogos. |
| Cuidado | O que fazer |
|---|---|
| A linguagem é grande e cresce todo ano | Siga as aulas em ordem. Você não precisa de tudo para programar bem. |
| Muito material antigo na internet | Tutoriais antigos usam class Program e static void Main em todo programa, e às vezes o .NET Framework. Funciona, mas é a forma antiga (aula Program.cs e o Main). |
| Precisa do .NET instalado para rodar | O programa normal precisa do .NET na máquina. Dá para publicar um programa que leva o .NET junto (aula Publicar o Programa). |
C#, C, Java e Python
Você vai ouvir falar dessas linguagens o tempo todo. Veja o mesmo programa, "mostrar Olá, mundo!", em cada uma:
Console.WriteLine("Olá, mundo!");
#include <stdio.h>
int main(void) {
printf("Olá, mundo!\n");
return 0;
}
public class Ola {
public static void main(String[] args) {
System.out.println("Olá, mundo!");
}
}
print("Olá, mundo!")
| C# | C | Java | Python | |
|---|---|---|---|---|
| Compila antes de rodar? | Sim, para IL, que o .NET roda | Sim, direto para código de máquina | Sim, para bytecode, que a JVM roda | Não: lê e executa na hora |
| Tipos conferidos antes de rodar? | Sim | Sim (com menos cuidado) | Sim | Não |
| Cuida da memória sozinha? | Sim (coletor de lixo) | Não: é à mão | Sim | Sim |
| Parecida com | Java (muito) | C++ | C# (muito) | Ruby |
O C# e o Java são "primos": os dois nasceram com a mesma ideia (compilar para uma linguagem intermediária e rodar numa máquina virtual que cuida da memória) e têm uma cara muito parecida. Quem aprende um lê o outro sem muito esforço. Do C, o C# herdou o jeito de escrever: chaves { }, ponto e vírgula, if, for, while. Mas não é "um C melhorado": os programas de C não funcionam em C#, como você vai ver logo abaixo.
Quando dá errado
Nesta aula ainda não há programa para errar, mas há ideias erradas muito comuns sobre o C#. E elas aparecem em forma de erro quando alguém traz o costume de outra linguagem.
error CS0103: O nome "printf" não existe no contexto atual
$ cat printf.cs
printf("Olá, mundo!\n");
$ dotnet run printf.cs
/home/ana/cs/printf.cs(1,1): error CS0103: O nome "printf" não existe no contexto atual
Ocorreu uma falha no build. Corrija os erros de build e execute novamente.
O que significa: o printf é do C. O C# não conhece esse nome ("não existe no contexto atual" = "não sei o que é isso aqui"). Apesar do nome parecido, o C# é outra linguagem, com outra biblioteca.
Como consertar: em C#, use Console.WriteLine("Olá, mundo!");. O \n não é necessário: o WriteLine já pula a linha.
error CS1002: ; esperado
$ cat print.cs
print("Olá, mundo!")
$ dotnet run print.cs
/home/ana/cs/print.cs(1,21): error CS1002: ; esperado
Ocorreu uma falha no build. Corrija os erros de build e execute novamente.
O que significa: em Python, a linha termina sozinha; em C#, toda instrução termina com ;. O compilador parou na coluna 21, logo depois do ), onde esperava o ponto e vírgula. Repare que ele nem chegou a reclamar do print: o primeiro erro que ele achou foi o ;. Com o ;, ele reclamaria do nome print, com o mesmo CS0103 do printf.
Como consertar: Console.WriteLine("Olá, mundo!");, com o ; no fim.
error CS1001: Identificador esperado
$ cat java.cs
System.out.println("Olá, mundo!");
$ dotnet run java.cs
/home/ana/cs/java.cs(1,8): error CS1001: Identificador esperado
/home/ana/cs/java.cs(1,8): error CS1002: ; esperado
/home/ana/cs/java.cs(1,8): error CS1022: Definição de namespace ou tipo, ou final do arquivo esperado
Ocorreu uma falha no build. Corrija os erros de build e execute novamente.
O que significa: três erros, todos na coluna 8, onde começa o out. Em C#, out é uma palavra reservada (tem um significado especial na linguagem, aula ref, out e in), então o compilador não esperava encontrá-la ali e se perdeu. Quando uma linha dá vários erros ao mesmo tempo, quase sempre o primeiro é o que importa: os outros são o compilador tentando entender o resto da linha.
Como consertar: o System.out.println do Java vira Console.WriteLine no C#.
Era verdade até 2016, no tempo do .NET Framework. Hoje, não: todas as saídas de terminal deste guia foram produzidas num computador com Ubuntu Linux, e o mesmo programa roda igual no Windows e no macOS. O que só existe no Windows são algumas bibliotecas de janelas (WPF e WinForms) e o editor Visual Studio. A aula Instalar no Linux mostra o dotnet --info dizendo OS Platform: Linux.
O que você vai conseguir fazer
No fim do Nível 1, você vai escrever programas de terminal que conversam com a pessoa, fazem contas, tomam decisões e repetem tarefas: uma calculadora, um jogo de adivinhação, um boletim de notas. No Nível 2, vai organizar programas maiores com classes, como uma conta bancária com depósitos e saques. No Nível 3, vai trabalhar com listas de dados, arquivos e JSON, consultas com LINQ e testes automáticos, como um programador profissional faz.
Missão: apresente-se
Missão: troque os dois ??? pelo seu nome e pelo que você quer fazer com o C# (por exemplo, criar jogos, mudar de carreira, passar na faculdade) e rode. Mantenha as aspas e o ;.
Console.WriteLine("Meu nome é ???");
Console.WriteLine("Quero aprender C# para ???");
Console.WriteLine("Meu nome é Ana");
Console.WriteLine("Quero aprender C# para criar jogos");
Exercícios
1. O tradutor
Como se chama o programa que lê o código-fonte e o traduz, avisando sobre os erros antes de rodar?
2. A extensão
Arquivos de código em C# terminam com que extensão? (Escreva com o ponto.)
3. O criador
Qual é o sobrenome do engenheiro que liderou a criação do C# (e também criou o TypeScript)?
4. A Ana escreveu idade = "trinta"; numa variável int. O que acontece?
5. Em que sistemas o C# com o .NET 10 roda?
6. Qual linguagem é a "prima" mais parecida com o C#?
7. O que quer dizer que o C# é "gerenciado"?
Resumo
- Um programa é uma lista de instruções; uma linguagem de programação é o jeito de escrevê-las; o compilador traduz o seu texto e acusa os erros antes de rodar.
- O C# é uma linguagem livre, criada pela Microsoft em 2000 (C# 1.0 em 2002), que roda no .NET em Linux, Windows e macOS.
- Ela é compilada, com tipos conferidos pelo compilador (
CS0029se misturar texto e número) e gerenciada (o .NET cuida da memória). - Os marcos: .NET Framework (2002, só Windows), Mono (2004), .NET Core (2016, multiplataforma), .NET 5 (2020, tudo junto) e C# 14 com .NET 10 (2025).
- O C# está em sites e sistemas (ASP.NET Core), jogos (Unity, Godot), programas de computador e celular (.NET MAUI) e na nuvem.
- É prima do Java, herdou a escrita do C, mas não aceita código de C (
printfdáCS0103). - Próximo passo: entender a plataforma por baixo da linguagem, em .NET: SDK, Runtime e CLR.