dotnet restore ~ Valida e instala as dependências adicionais com base no .csproj
dotnet build
dotnet build ~ Compila a aplicação
dotnet clean
dotnet clean ~ Limpa o cache da aplicação
dotnet run
dotnet run ~ Executa a aplicação
Variáveis de ambiente
Podemos passar ao .NET qual ambiente estamos rodando
dotnet run --environment=$AMBIENTE
dotnet run --environment=development
dotnet run --environment=production
O run não executa depuração (debug)
Estrutura do Console App
.csproj ~ XML de definição do projeto
Program.cs ~ Porta de entrada da aplicação
Linguagem de Programação com C#
Escopo de um programa
Importações
Namespace
Classe
Método principal
Namespace
Divisões lógicas da aplicação
Nomes de classes são únicos dentro do namespace
Pode ser reutilizado entre vários arquivos e classes
Nomes devem ser UpperCamelCase e sem caracteres especiais
Um namespace dentro do outro, usando .
MeuApp.Teste
Costumam acompanhar os nomes das pastas
Importações (using)
Bibliotecas e namespaces que o programa vai usar
Via de regra, feitas no topo do arquivo
Variáveis
Espaço de armazenamento de uma informação que pode variar
Pode ser definida com o tipo ou com a palavra reservada var
O tipo precede o nome da variável
Utilize nomes coesos
Nomes devem ser lowerCamelCase e sem caracteres especiais
Constantes
Espaço de armazenamento de valor que não pode ser alterado depois
Já deve ser instanciada com o valor
Nomes maiúsculos separados com _
Palavras Reservadas
Palavras-chave que não devem ser usadas como nomes de variáveis, constantes, classes, métodos, etc
Comentários
Uma linha // Uma linha
Multi-linhas /* Multi-linhas */
XML /// <?xml?>
Tipos Primitivos
built-in types
Tipos base que serão derivados em tipos complexos
Tipos de valor ~ Value Types
Armazenam o valor e não a referência para o item na memória
Classificados em
Tipos Simples ~ Simple Types
Enumeradores ~ Enums
Estruturas ~ Structs
Tipos Nulos ~ Nullable Types
Cada tipo primitivo possui uma capacidade
System
No .NET, todos os tipos derivam do System
Byte
Usado para representar um byte de fato
8-bit ~ 0 à 255
Arquivos ou streams costumam ser cadeias de bytes (byte array)
sbyte ~ signed byte
Permite valores negativos
8-bit ~ -128 à 127
Números inteiros
short ~ 16-bit
ushort ~ unsigned short
int ~ 32-bit
uint ~ unsigned int
long ~ 64-bit
ulong ~ unsigned long
Números reais
float ~ Notação F
32-bit
double
64-bit
decimal ~ Notação M
128-bit
floatsalario=2500.25F;// Notação Fdoubletarifa=125.95;// Padrãodecimalpreco=1923.75M;// Notação M
Boolean
Armazena true ou false
bool ~ 8-bit
Char
Armazena um caractere unicode
Definido com 'aspas simples'
char ~ 16-bit
String
Cadeia / lista de caracteres
Definido com "aspas duplas"
string ~ Tamanho alocado depende do conteúdo
Var
Wildcard que assume o tipo do primeiro valor atribuído à variável
Object
Tipo genérico que recebe qualquer valor
Nullable Types
Todo tipo pode receber o valor null
Devem ser marcados como Nullable Type
int?idade=null;// '?' marca como Nullable Type
Alias
Apelido que todo tipo no .NET tem
System.String tem o alias string
System.Int32 tem o alias int
Valores Padrão
Tipos built-in sempre tem valor padrão
int ~ 0
float ~ 0
decimal ~ 0
bool ~ false
char ~ '\0'
string ~ ""
Conversão Implícita
Conversões entre tipos e tamanhos de dados compatíveis
Podem ser executadas através da simples passagem de dados
floatflutuante=25.8F;intinteiro=25;shortcurto=25;flutuante=inteiro;// Conversão implícitainteiro=flutuante;// Tipo incompatível. Não funcionacurto=inteiro;// Tamanho incompatível. Não funciona
Conversão explícita
Deve explícitar o tipo da conversão
intinteiro=100;uintsemSinal=(uint)inteiro;// Conversão explícita de int para uint
Parse
Presente em todo tipo primitivo
Gera erro em caso de incompatibilidade
intinteiro=int.Parse("100");
Convert
Similar ao Parse, mas permite converter entre vários tipos de valores
intinteiro= Convert.ToInt32("100")
Operadores Aritméticos
Multiplicação e divisão são executadas primeiro
Aceita short, int, float, double e decimal
Em tipos inteiros, valores decimais são arredondados
Operadores de Atribuição
Podemos utilizar junto ao operador aritmético
x += 5 equivale a x = x + 5
x -= 5 equivale a x = x - 5
x *= 5 equivale a x = x * 5
x /= 5 equivale a x = x / 5
Operadores de comparação
Comparação entre valores que retorna true ou false
== ~ Igual
!= ~ Diferente
> ~ Maior que
< ~ Menor que
>= ~ Maior ou igual a
<= ~ Menor ou igual a
Operadores Lógicos
Usados para operações condicionais
Sempre retornam true ou false
E ~ and ~ &&
OU ~ or ~ ||
NEGAÇÃO ~ not ~ !
Heap e Stack
Divisões da memória: Heap e Stack
Heap armazena dados
Stack armazena referências para os dados
Value Types
Ao armazenar valor a memória é alocada
A variável acessa o dado diretamente
Built-in, Structs, Enums
Garbage Collector (GC) não acessa o Stack
Reference Types
Armazenam o endereço do objeto que contem os dados
Armazenadas no Heap
Várias variáveis distintas vão apontar para o mesmo objeto
Quando não são mais utilizados, são removidos pelo GC
Classes, Objects, Arrays
Enumeradores
Inteiro que fornece uma visualização melhor para o código