Skip to content

About

📚Playground e cheatsheet para aprender Csharp. Coleção de projetos Csharp que são divididos por tópicos e contêm exemplos de código com explicações.

Topics

Resources

Stars

7 stars

Watchers

1 watching

Forks

Latest commit

 

History

8 Commits

Folders and files

Repository files navigation

Playground e Cheatsheet Para Aprender C#

CI

Essa é uma coleção de projetos C# dividida em tópicos que contém exemplos de código com explicações, diferentes usos e links para outras leituras.

É um playground porque você pode fazer alterações no código para ver como ele se comporta, além de testá-lo usando asserções. Também é possível revisar o código automaticamente com o dotnet format e verificar se ele segue o guia de estilo de código C# definido no .editorconfig. Isso tudo pode tornar seu processo de aprendizagem mais interativo e ajudar a manter a qualidade do código bastante alta desde o início.

É um cheatsheet porque você pode voltar a esses exemplos de código quando quiser recapitular a sintaxe das estruturas padrão do C#. O código está cheio de asserções, então você poderá ver o retorno dos métodos sem precisar executá-los.

Você pode se interessar também por 🤖 Gravatar Extensions

Estrutura do Repositório

learn-csharp/
├─ learn-csharp.sln          # solução com todos os exemplos (playground/cheatsheet)
├─ README.md
├─ .editorconfig             # guia de estilo de código
└─ src/
   ├─ getting_started/       # variáveis e fundamentos
   ├─ operators/             # aritméticos, bitwise, atribuição, relacionais, lógicos
   ├─ data_types/            # byte ... object, string, bool, decimal, ...
   ├─ control_flow/          # if, switch, laços, try-catch, using, yield, async, goto ...
   ├─ metodos/               # métodos (funções)
   ├─ classes/               # classes, objetos, herança
   ├─ modules/               # namespaces, `using` e pacotes NuGet
   ├─ exceptions/            # tratamento de exceções
   ├─ files/                 # leitura e escrita de arquivos
   ├─ additions/             # tópicos extras (tuplas, LINQ, pattern matching ...)
   ├─ standard_libraries/    # bibliotecas padrão (DateTime, TimeSpan)
   ├─ classes_e_objetos/     # trilha de POO: classes, objetos, métodos, herança ...
   └─ ... (demais tópicos de POO listados no Índice)

Os tópicos de Programação Orientada a Objetos (POO) ficam em projetos separados na pasta src/, cada um com suas classes de exemplo (Pessoa.cs, Veiculo.cs, ...) e o arquivo de testes test_*.cs. Eles fazem parte da solução learn-csharp.sln.

Como Usar Esse Repositório

Cada arquivo de exemplo é estruturado para facilitar a aprendizagem e a experimentação dos tópicos de C#. Aqui está um exemplo de como um arquivo típico está organizado:

    // Nome do tópico
    // Exemplo: Variáveis (variáveis em C#)

    // Link para leituras adicionais
    // @see: https://learn.microsoft.com/pt-br/dotnet/csharp/language-reference/builtin-types/value-types

    // Descrição do Tópico
    // Uma explicação mais detalhada sobre o tópico atual, como variáveis em C#.
    // Exemplo: Variáveis armazenam dados na memória. Em C#, toda variável possui
    // um tipo que define o que ela pode guardar.

    // Exemplo de Código
    int numero = 42; // declaração de uma variável inteira chamada "numero"

    // Explicação do Subtópico
    // Cada arquivo contém exemplos e funções de teste que ilustram subtópicos
    // (ex.: tipos de variáveis, escopo, conversões).

Exemplo: Trabalhando com Variáveis em C#

Variáveis armazenam dados na memória. Em C#, toda variável possui um tipo fixo, definido na declaração. Veja abaixo como declarar e manipular variáveis:

// Declaração de um inteiro chamado "idade"
int idade = 25;

// A palavra-chave "var" infere o tipo a partir do valor atribuído
var nome = "Erismar"; // inferido como string

// Imprimindo os valores das variáveis
Console.WriteLine($"{nome} tem {idade} anos."); // Saída: Erismar tem 25 anos.

// Variáveis podem ser atualizadas (o tipo permanece o mesmo)
idade = idade + 1;
Console.WriteLine(idade); // Saída: 26

Tipos por valor vs. tipos por referência

  • Tipos por valor (int, double, bool, char, decimal, ...): a variável guarda o próprio valor.
  • Tipos por referência (string, classes, ...): a variável guarda uma referência para o objeto na memória.

Então você pode querer fazer o seguinte:

  • Encontrar o tópico que deseja aprender ou recapitular.
  • Ler os comentários e/ou a documentação vinculada em cada projeto (como no exemplo acima).
  • Analisar os exemplos e asserções para ver exemplos de uso e saída esperada dos métodos.
  • Alterar o código ou adicionar novas asserções para ver o que acontece.
  • Executar testes e revisar o código para ver se ele funciona e para saber se está escrito corretamente.

Índice

Tópico Exemplo Assunto
Começando
O que é C# what_is_csharp.md História, características e usos da linguagem
Sintaxe de C# csharp_syntax.md Estrutura básica, controles, métodos, classes
Variáveis test_variables.cs Declaração, var, escopo, conversões, const
Operadores
Aritméticos test_arithmetic.cs + - * / %, precedência, divisão inteira
Bitwise test_bitwise.cs & | ^ ~ << >>
Atribuição test_assignment.cs = += -= *= /= %= <<= >>= &= |= ^= ??=
Relacionais test_relation.cs == != > < >= <=, referência vs conteúdo
Lógicos test_logical.cs && || ! e curto-circuito
Tipos de Dados
byte test_byte.cs inteiro sem sinal de 8 bits (0 a 255)
sbyte test_sbyte.cs inteiro com sinal de 8 bits (-128 a 127)
short test_short.cs inteiro com sinal de 16 bits
ushort test_ushort.cs inteiro sem sinal de 16 bits
int test_numbers-int.cs inteiro com sinal de 32 bits, estouro
uint test_uint.cs inteiro sem sinal de 32 bits
long test_long.cs inteiro com sinal de 64 bits
ulong test_ulong.cs inteiro sem sinal de 64 bits
float test_numbers-float.cs ponto flutuante de 32 bits
double test_double.cs ponto flutuante de 64 bits
decimal test_decimal.cs alta precisão p/ cálculos financeiros
char test_char.cs caractere Unicode
bool test_bool.cs true/false
string test_strings.cs cadeia imutável de caracteres
object test_object.cs tipo base de tudo, boxing/unboxing
Controles de Fluxo
if test_if.cs decisão com uma condição
if-else test_if_else.cs decisão com alternativa
else if test_else_if.cs múltiplas condições em sequência
foreach test_foreach.cs percorrer coleções
switch test_switch.cs seleção por casos e switch expressions
for test_for.cs laço com contador
while test_while.cs laço com verificação no início
do-while test_do_while.cs laço que executa ao menos uma vez
try-catch test_try_catch.cs captura de exceções
break test_break.cs encerrar o laço
continue test_continue.cs pular para a próxima iteração
return test_return.cs devolver valores e encerrar métodos
using test_using.cs liberar recursos (IDisposable)
yield test_yield.cs gerar sequências sob demanda
async/await test_async_await.cs programação assíncrona
goto test_goto.cs desviar para rótulos
Funções
Métodos test_metodos.cs parâmetros, ref/out, sobrecarga, params
Classes
Definição de Classe test_class_definition.cs campos, propriedades, construtores
Objetos test_class_objects.cs instâncias e semântica de referência
Instância de Objetos test_instance_objects.cs new, inicializadores de objeto
Métodos de Objetos test_method_objects.cs métodos de instância e encadeamento
Variáveis de Classe e Instância test_class_and_instance_variables.cs static, const, readonly
Herança test_inheritance.cs virtual/override, base, is/as
Módulos
Módulos (using) test_modules.cs namespaces, importação, aliases
Pacotes (NuGet) test_packages.cs PackageReference para bibliotecas
Erros e Exceções
Tratando Exceções test_handle_exceptions.cs try/catch/finally, exceções personalizadas
Arquivos
Lendo e Escrevendo test_file_reading.cs StreamWriter/StreamReader
Adicional
Tópicos Adicionais test_additions.cs tuplas, LINQ, pattern matching
Bibliotecas Padrão
Tempo e Datas test_datetime.cs DateTime e TimeSpan
Programação Orientada a Objetos
Classes e Objetos test_classes_e_objetos.cs classes, instâncias, referências
Atributos (Campos) test_atributo_das_classes.cs campos e inicializadores de objeto
Métodos Simples test_metodos_simples.cs métodos que executam ações
Métodos com Parâmetros test_metodos_com_parametros.cs passagem de parâmetros
Parâmetros por Valor e Referência test_parametros_por_valor_e_por_referencia.cs ref e cópias
Métodos com Retorno test_metodos_com_retorno.cs return e valores
Sobrecarga de Métodos test_sobrecarga_de_metodos.cs mesmos nomes, assinaturas diferentes
O Termo this test_utilizando_o_termo_this.cs referência ao objeto atual
Delegates test_delegates.cs referências a métodos
Método Construtor test_metodo_construtor_da_classe.cs inicialização de objetos
Sobrecarga de Construtor test_sobrecarga_de_construtor.cs construtores com assinaturas variadas
Classes Estáticas test_classes_estaticas.cs classes sem instâncias
Membros Estáticos test_membros_estaticos.cs static em métodos e campos
Classes Parciais test_classes_parciais.cs classes divididas em arquivos
Encapsulamento test_encapsulamento.cs proteção do estado
Encapsulamento com Propriedades test_encapsulamento_com_propriedades.cs propriedades validadas
Propriedades (Get/Set) test_propriedades_da_classe_get_set.cs getters e setters
Propriedades e Encapsulamento test_propriedades_e_encapsulamento.cs campos privados e regras
Herança test_heranca.cs classes derivadas, base
Classes Abstratas test_classes_abstratas.cs modelos para derivação
Classes Sealed test_classes_sealed.cs classes que não podem ser herdadas
Membros Sealed test_membros_sealed.cs membros que não podem ser sobrescritos
Modificadores de Acesso test_modificadores_de_acesso.cs public, private, protected, internal
Polimorfismo test_polimorfismo.cs virtual/override, abstract
Interfaces test_interfaces.cs contratos de implementação

Pré-requisitos

Instalando o Dotnet

Certifique-se de ter o SDK Dotnet instalado em sua máquina. Este repositório assume o SDK mais recente e os exemplos do playground/cheatsheet usam net10.0.

Você pode ver a versão do Dotnet executando:

dotnet --version

Nota sobre as versões: todos os exemplos de src/ (solução learn-csharp.sln) usam net10.0.

Instalando dependências

Na pasta raiz do repositório (onde está a solução learn-csharp.sln), execute:

dotnet restore

O comando dotnet restore baixará todas as dependências listadas nos arquivos .csproj das soluções, utilizando o NuGet como gerenciador de pacotes.

💡Dica Adicional

Se precisar atualizar as dependências para as versões mais recentes disponíveis, você pode usar o comando:

dotnet restore --force

Isso força uma nova restauração, baixando as versões mais recentes dos pacotes, conforme especificado nas configurações do projeto.

Testando o Código

Os exemplos do playground são escritos como testes de unidade usando o framework xunit (com o Microsoft.NET.Test.Sdk para execução). Cada arquivo test_*.cs contém métodos marcados com [Fact] que validam o comportamento com asserções.

Para executar todos os testes, execute o seguinte comando na raiz do repositório:

dotnet test

Para executar os testes de um tópico (projeto) específico:

dotnet test src/operators

Para executar um teste específico por nome:

dotnet test --filter "FullyQualifiedName~Operators.TestLogical.CurtoCircuitoDoAnd"

Para executar todos os testes de um tópico (namespace) inteiro:

dotnet test --filter "FullyQualifiedName~DataTypes"

Revisando o Código

O repositório traz um .editorconfig com o guia de estilo de código C# adotado. Você pode revisar a formatação dos arquivos automaticamente com o dotnet format.

Verificar se todo o código está de acordo com o estilo (sem alterar nada):

dotnet format learn-csharp.sln --verify-no-changes

Aplicar a formatação automaticamente:

dotnet format learn-csharp.sln

Esse mesmo comando de verificação roda no pipeline de integração contínua (.github/workflows/ci.yml), garantindo que contribuições sigam o estilo do projeto.

About

📚Playground e cheatsheet para aprender Csharp. Coleção de projetos Csharp que são divididos por tópicos e contêm exemplos de código com explicações.

Topics

Resources

Stars

7 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages