Slides 1
Slides 1
Slides 1
1 2
Introdução ao C#
3 4
5 6
Em 2016, o C# e a plataforma .NET foram
reconstruídos do zero A mudança de nome .NetFramework para
.Net Core não agradou muito a comunidade
Neste ano, foi lançado o .Net Core
Em 2020, a plataforma foi rebatizada e foi
Código aberto (open source) e lançado o .NET 5
multiplataforma (Windows, Linux, Mobile,
Mac, IoT, etc) A partir de agora, as próximas versões
seguem com o nome “.NET X” (em que X é a
O Net Core chegou em sua versão final, a versão)
versão 3.1, em 2020
7 8
9 10
C# e F#: Roslyn
Sintaxe Básica
CIL
CLR: Código nativo
11 12
Tipos básicos (value types)
Bytes na
Value types Tipo
memória
Limites
Reference type (tipo pro referência) diretamente de float 4 Números até 10 elevados a 38
13 14
//int (inteiros):
Declaração de variáveis int v1 = 10;
int v2 = ‐20;
O C# possui um modelo simples e conciso de int resultInt = v1 + v2; //10 ‐20 = ‐10
declaração de variáveis uint uv3 = 10 + 10; //20
//char
Vamos ver os principais tipos primitivos e seu char o = 'o';
modo de declaração char i = 'i';
bool a = true; //Não podemos "somar dois caracteres“, pois isso seria uma string.
bool b = false; //Então vamos inicializar uma string a partir de um array (lista) de caracteres:
bool resultBool = a && b; // true AND false = false – operação básica com booleanos. string resultChar = new string(new char[] { o, i, exc });
15 16
string s1 = "oi!";
Objetos sempre apontam para uma referência, como string s2 = new string('x', 5); // "xxxxx"
na esquema abaixo string s3 = s1 + s2; // "oi!" + "xxxxx" = "oi!xxxxx"
//objetos
Stack memory Heap memory
object obj1 = new object();
Objeto 1.Nome
Console.WriteLine(obj1.ToString()); // System.Object ‐
João
este é um objeto vazio (com um valor default na memória)
Objeto 2.Nome 103023
(endereço do object obj2 = s3;
valor real na Console.WriteLine(obj2.ToString()); // "oi!xxxxx" ‐
memória)
este objeto aponta para a mesma referência da string s3
17 18
Blocos de decisão – if Blocos de decisão – switch
//Blocos de decisão if: int teste1 = 1;
int val1 = 10; bool csharpRocks = true; //teste lógico, se 1 > 0 e a variável csharpRocks
for verdadeira
int val2 = 100;
//decidirá em qual "case" cair
if (val1 + val2 > 0) switch (teste1 > 0 && csharpRocks)
{ {
//executa: "Condição 1 verdadeira“ case true:
Console.WriteLine("Condição 1 verdadeira"); //executa:
Console.WriteLine("C# Rocks!");
} break;
val2 = int.MinValue; case false:
if (val1 + val2 > 0) Console.WriteLine("C# é ruim!");
{ break;
default:
Console.WriteLine("Condição 2 verdadeira"); //repare que o compilador lhe ajuda marcando embaixo da
} palavra console
else //pois como é uma condição lógica, só temos true e false
{ //o default do bloco switch/case nunca será executado para
esta situação
//executa: "Condição 2 falsa“
Console.WriteLine("Não pode cair aqui!");
Console.WriteLine("Condição 2 falsa"); break;
} }
19 20
21 22
}
}
Podem criar um conceito de níveis
/*
c# rocks!
c# rocks Sempre separado por um ponto
c# rock
c# roc
c# ro
Você pode ter classes com o mesmo nome em
c# r
c# namespaces diferentes
*/
23 24
Propriedades
25 26
27 28
Full
string nomeCompleto;
public string NomeCompleto
{
Declaram comportamentos, ou seja, métodos
get
{ Simple Seu objetivo é expor comportamentos
return nomeCompleto;
}
set
public string NomeCompleto comuns entre classes
{ {
29 30
É uma convenção utilizarmos a letra “I” na frente
Modificadores de acesso
Sufixo “able/iable” (em inglês)
O ideal é que seu nome reflita seu conjunto de
comportamentos
Métodos
Modificadores de acesso são palavras-chaves
Propriedades
adicionadas antes de um tipo (type) e que
Retornos de valores constantes
interface Icomestivel
podem limitar sua acessibilidade a outros
{
void Mastigar(object comida);
tipos (classes, strutcs, etc.)
int MaximoComida { get;}
string Descrever()
{
return "Possibilita o comportamento de mastigar um alimento";
}
}
31 32
33 34
//sem var
Dictionary<string, string> dicionario = new Dictionary<string, string>();
/com var
var dicionario = new Dictionary<string, string>();
35 36
Types Objects
A palavra “type” (“tipo”), tem um significado
Todos os objetos
especial no C#, pois todos os objetos e tipos
(reference types)
primitivos são de um “tipo”, ou seja, de um type herdam de um único
Todos os objetos possuem um método type: “object”
“GetType()” (System.Object)
37 38
39 40
Structs Enums
São value types. Não herdam diretamente de São value types, assim como as structs
object
Possuem a funcionalidade de “enumerar”
Todos os tipos primitivos são structs listas tipadas e rígidas
Não suportam herança
Cada item do enum possui implicitamente um
Implicitamente é um object, mas é um tipo valor int
especial de object public enum Direcoes
{
objects }
41 42
Estrutura de Types no .NET
Exceptions
43 44
Exceptions (exceções)
45 46
Try/catch/finally
StrackTrace
Uma string que representa todos os
métodos que o código executou até o erro.
Blocos try/catch/finally são blocos que
Ajuda a entender como o erro aconteceu
podem deter um erro inesperado
InnerException
O bloco try deve estar sempre acompanhado
Caso sua exceção possua outras exceções de um bloco catch ou um bloco finally ou de
como causa raiz, essa propriedade estará ambos
preenchida com a exceção original
47 48