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.

Você vai aprender
  • 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 cozinhaNa programaçãoNo C#
A receita escrita em portuguêsO código-fonte: o texto que você escreveum arquivo ola.cs
O tradutor que passa a receita para outra línguaO compiladoro Roslyn, que vem dentro do comando dotnet
A cozinheira que lê a receita traduzida e faz o boloQuem executa o programao .NET (aula .NET: SDK, Runtime e CLR)
O bolo na mesaO resultado: o que aparece na telaOlá, 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.

AnoO que aconteceu
2000A Microsoft apresenta o C# e o .NET.
2002Sai 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).
2004Sai o Mono, uma versão livre do .NET feita fora da Microsoft, que leva o C# para o Linux e o macOS.
2005 a 2012O 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).
2014A Microsoft abre o código do compilador (o Roslyn) e começa um .NET novo, livre e multiplataforma.
2016Sai 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.
2020O .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.
2025Saem 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:

ÁreaCom o quêExemplos
Sites e sistemas na internetASP.NET CoreLojas virtuais, sistemas de bancos, de hospitais e do governo; as APIs que os aplicativos de celular consultam.
JogosUnity e GodotNo 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 computadorWPF, WinForms, AvaloniaProgramas de empresas, sistemas de caixa de loja, ferramentas do Windows.
Celular e computador ao mesmo tempo.NET MAUIUm código só para Android, iPhone, Windows e macOS.
Nuvem e automaçãoAzure, AWS, contêineresServiç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

VantagemPor quê
O compilador pega muitos erros cedoTipos conferidos antes de rodar, avisos sobre variáveis esquecidas e sobre null (aula Referências Anuláveis).
A memória é cuidada pelo .NETVocê não precisa liberar memória à mão, como em C.
Biblioteca enormeArquivos, datas, JSON, internet, criptografia, listas: vem tudo pronto no .NET.
Ferramentas muito boasEditores que completam o código e mostram o erro enquanto você digita (aula Editores e IDEs).
RápidoO .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 trabalhoMuito usado em empresas, bancos e estúdios de jogos.
CuidadoO que fazer
A linguagem é grande e cresce todo anoSiga as aulas em ordem. Você não precisa de tudo para programar bem.
Muito material antigo na internetTutoriais 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 rodarO 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#CJavaPython
Compila antes de rodar?Sim, para IL, que o .NET rodaSim, direto para código de máquinaSim, para bytecode, que a JVM rodaNão: lê e executa na hora
Tipos conferidos antes de rodar?SimSim (com menos cuidado)SimNão
Cuida da memória sozinha?Sim (coletor de lixo)Não: é à mãoSimSim
Parecida comJava (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.

"C# é o C com outro nome": 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.

O costume do Python: 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.

O costume do Java: 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#.

"C# só roda no Windows"

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?

o

2. A extensão

Arquivos de código em C# terminam com que extensão? (Escreva com o ponto.)

ola

3. O criador

Qual é o sobrenome do engenheiro que liderou a criação do C# (e também criou o TypeScript)?

Anders

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 (CS0029 se 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 (printf dá CS0103).
  • Próximo passo: entender a plataforma por baixo da linguagem, em .NET: SDK, Runtime e CLR.