Escolar Documentos
Profissional Documentos
Cultura Documentos
Fundamentos do C#
Escopo de um programa
Notas Importantes
Definições
- Não utilize espaços nem caracteres especiais na criação do programa
- Bons: MeuApp, Pedidos, MinhaApp
- Ruins: “Meu App”, $APP, App #Teste
- Tente utilizar caminhos curtos e sem caracteres especiais
- Bons: C:\dev, C:\apps
- Ruins: C:\Caminho Com Espaços e Caracteres Especiais\Meu App
- Evite caminhos de rede
- Se possível, utilize o C:\
- O C# é Code Sensitive
- Isto significa que ele diferencia maiúsculas de minúsculas
- Teste é diferente de teste
Escopo de um programa
Definições
- Importações
- Namespace
- Classe
- Método Principal
2801
Fundamentos do C#
Namespaces
Namespace
Definições
- Enquanto as pastas são as divisões físicas
- Os namespaces são as divisões lógicas
- Assim como não podemos ter dois arquivos com mesmo nome nas pastas
- Não podemos ter duas classes com mesmo nome em um namespace
- O ideal é ter apenas um namespace e uma classe por arquivo
- O escopo de um namespace é definido entre CHAVES
- Classes e métodos também
- Um namespace pode ser reutilizado
- Pode estar presente em diversos arquivos
Namespace
Definições
- Podemos criar quantos namespaces quisermos
- Não devem conter espaços ou caracteres especiais
- Toda palavra no namespace começa com maiúsculo
- Podemos ter um namespace dentro de outro usando “.”
- A importação que vimos anteriormente é feita pelos namespaces
- Normalmente acompanham os nomes das pastas
Namespace
Definições
- Durante a execução, todos os arquivos do C# serão unificados
- A divisão física se perderá
- Sobrará apenas a divisão lógica, que são os namespaces
2801
Fundamentos do C#
Using
Importações
Definições
- Importações definem as bibliotecas que nosso programa irá utilizar
- Por padrão só o básico vem incluso
- Precisamos importar o que desejamos para poder trabalhar
- Isto é feito no começo do programa
- Utilizamos a palavra reservada using para isto
Notas Importantes
Definições
- Organizar nosso código em pastas e namespaces é fundamental
- Em aplicações grandes, o volume de código é alto
- A quantidade de arquivos é alta
- E o número de pessoas trabalhando no mesmo projeto também
- Entender bem esta organização é fundamental
- Use e abuse da criação de arquivos e namespaces
2801
Fundamentos do C#
Variáveis
Variáveis
Definições
- Uma variável é algo que utilizamos para armazenar uma informação
- Ser variável significa que seu valor pode ser alterado a qualquer momento
- Ou seja, ele pode variar
- Sempre que “criamos” uma variável, dizemos que estamos inicializando ela
Variáveis
Definições
- Podemos usar um TIPO ou a palavra reservada var para criar uma variável
- Vamos aprender ainda sobre tipo de dados
- No C# o tipo vem sempre antes do nome da variável
- Podemos informar um valor já na criação da variável
- Se não informado o valor padrão será aplicado
Definições
- Utilize nomes coesos
- Não utilize caracteres especiais ou espaços
- Não comece com números
- A primeira letra de cada palavra é SEMPRE minúscula
2801
Fundamentos do C#
Constantes
Constantes
Definições
- Também utilizamos uma constante para armazenar uma informação
- As constantes NÃO PODEM ser alteradas
- Uma vez criadas somos obrigados a atribuir um valor
- Feito isto elas não poderão ser modificadas novamente
- Não funcionam com a utilização de var
- São mais otimizadas que as variáveis
- Recomendadas para usos frequentes
Constantes
Definições
- A definição de constante é dada pela palavra reservada const antes do tipo
- Caso não seja informado um valor, o valor padrão será atribuido
Definições
- Utilize nomes coesos
- Não utilize caracteres especiais ou espaços
- Não comece com números
- É comum vermos constantes todas em maiúsculas, separadas por “_”
- A ideia é bater o olho no código e saber que aquilo é uma constante
2801
Fundamentos do C#
Nomes Reservados
Nomes Reservados
Definições
- Também chamados de keywords
- São palavras de uso exclusivo do C#
- Não podemos utilizar como nomes de variáveis ou constantes
- O Visual Studio Code vai te avisar sobre eles
2801
Fundamentos do C#
Comentários
Comentários
Definições
- Em diversos cenários você precisará deixar uma mensagem
- Esta mensagem não deve ser executada pelo programa
- É comum utilizarmos comentários em linhas que não desejamos executar também
- Podemos ter comentários de
- Uma linha
- Múltiplas linhas
- XML (Metadata)
Comentários
/*
Co mentário em várias
linhas
*/
Fundamentos do C#
Tipos Primitivos
Tipos Primitivos
Definições
- Também conhecidos como built-in types
- São tipos base cujo outros tipos (Complexos) irão derivar
- Definir o tipo correto otimiza a execução do programa
- São chamados de Tipos de Valor
- Armazenam o valor e não a referência para um item na memória
- São classificados em
- Tipos Simples (Simple Types)
- Enumeradores (Enums)
- Estruturas (Structs)
- Tipos Nulos (Nullable Types)
Tipos Primitivos
Definições
- Cada tipo possui uma capacidade
- Caso esta capacidade exceda, o programa gera um erro
- Esta capacidade pré-definida ajuda na otimização do seu programa
- Por exemplo o int que usamos previamente:
- -2,147,483,648 até 2,147,483,647
2801
Fundamentos do C#
System
System
Definições
- No .NET tudo começa de um tipo base chamado system
- Todo e qualquer tipo, seja built-in ou complexo deriva dele
- Ele é a base de todos os objetos no .NET
- Não precisamos nos preocupar em usá-lo ou qualquer coisa similar
- Seu uso já é implícito
2801
Fundamentos do C#
Byte
Byte
Definições
- O tipo byte é utilizado para representar um byte de fato
- Em diversos casos precisamos da cadeia de bytes de um arquivo por exemplo
- Também chamado de byte array
- Temos também o sbyte, que permite valores negativos
Signed e Usigned
Valores com sinal como “-” por exemplo, são chamados de signed.
Byte
Definições
- byte (8-bit)
- 0 até 255
- sbyte (8-bit)
- -128 até 127
- Note que o sbyte permite valores negativos, por isto no nome sbyte, que significa Signed Byte
2801
Fundamentos do C#
Números Inteiros
Números Inteiros
Definições
- Numeros inteiros, ou seja, sem pontuação, podem ser definidos pelos tipos
- short/ushort
- int/uint
- long/ulong
- Assim como temos o signed nos bytes, nos números por padrão são permitidos valores negativos
- Então usamos o unsigned para definir que o mesmo não pode receber valores negativos
- O tipo int é o mais comum a ser encontrado
Números Inteiros
Definições
- short (16-bit)
- -32,768 to 32,767
- ushort (16-bit)
- 0 até 65.535
- int (32-bit)
- -2,147,483,648 até 2,147,483,647
- uint (32-bit)
- 0 até 4,294,967,295
- long (64-bit)
- -9,223,372,036,854,775,808 até 9,223,372,036,854,775,807
- ulong (64-bit)
- 0 até 18,446,744,073,709,551,615
2801
Fundamentos do C#
Números Reais
Números Reais
Definições
- Numeros que exigem uma maior precisam, ou seja, com pontuação
- float(Notação F)
- double
- decimal (Notação M)
- Possuem assimilação negativa e positiva por padrão, dispensando uso do signed/unsigned em seus tipos.
Números Inteiros
Definições
- float (32-bit)
- -3.402823e38 até 3.402823e38
- double (64-bit)
- -1.79769313486232e308 até 1.79769313486232e308
- decimal (128-bit)
- (+ ou -)1.0 x 10e-28 até 7.9 x 10e28
2801
Fundamentos do C#
Bool
Boolean
Definições
- Tipo booliano, armazena apenas true ou false (Verdadeiro ou Falso)
- Definido pela palavra reservada bool
- bool (8-bit)
- true ou false
2801
Fundamentos do C#
Char
Char
Definições
- Utilizado para armazenar apenas um caractere no formato Unicode
- Definido pela palavra reservada char
- A atribuição de um valor char é dada por aspas simples
- char (16-bit)
- Qualquer caractere
2801
Fundamentos do C#
String
String
Definições
- Armazena uma cadeia de caracteres
- Podemos pensar nele como uma lista de char
- Definido pela palavra reservada string
- A atribuição de um valor string é dada por aspas duplas
- string (?)
- Uma cadeia de caracteres
2801
Fundamentos do C#
Var
Var
Definições
- Substitui o nome de um tipo
- Será do tipo do primeiro valor atribuído
- Recomendado o uso
- Deixe para usar var quando já dominar os tipos
Fundamentos do C#
Object
Object
Definições
- Tipo genérico que recebe qualquer valor ou objeto
- Caso não saiba o tipo da informação ou ela seja de vários tipos diferentes
- Não possui intelisense (Ajuda dos editores) por ser um tipo desconhecido
- Evite usar
Fundamentos do C#
Nullable Types
Null
Definições
- Significa vazio, nada
- Diferente de zero ou uma string vazia
- Todo tipo, primitivo ou complexo pode receber o valor null
- O tipo deve ser marcado como Nullable Type
Null
Definições
- Podemos atribuir null a um objeto
- Desde que o mesmo seja marcado como nullable
- Usando interrogação na frente do tipo
- Se uma chamada a um valor nulo for feita um erro será apresentado
int?idade = null;
2801
Fundamentos do C#
Alias
Alias
Definições
- Alias é um apelido que todo tipo no .NET tem
- Por exemplo
- System.String tem o alias string
- Vimos anteriormente os alias
Alias
Definições
- Como o C# é Case Sensitive, tanto faz escrevermos um ou outro
- Porém, o recomendado é sempre o usar o alias
- No caso abaixo o resultado é o mesmo
- Com alias escrevemos menos
Fundamentos do C#
Valores Padrões
Valores Padrões
Definições
- Todo tipo built-in, já possui um valor padrão
- Se nenhum valor for informado, seu valor padrão será utilizado
- int => 0
- float => 0
- decimal => 0
- bool => false
- char => '\0’
- String => “”
2801
Fundamentos do C#
Conversão Implícita
Conversão Implícita
Definições
- É comum precisarmos transformar um dado de tipo X para tipo Y
- Existem dois tipos de conversão, as implícitas e as explícitas
- As implícitas são conversões que
- Podem ser executadas apenas com passagem de dados
- Possuem tipos compatíveis
Definições
- A conversão anterior ocorreu pois um número real pode receber um número inteiro
- Porém, ao contrário não aconteceria
- Um número inteiro não tem pontuação
- Logo ele não poderia receber um número real
- A conversão só ocorrerá se
- O tipo de dado for compatível
- O tamanho do dado for compatível
- Em caso de números a precisão pode ser alterada
- Qualquer situação adversa causará erro
Conversão Implícita
Definições
- sbyte
- short, int, long, float, double, decimal
- byte
- short, ushort, int, uint, long, ulong, float, double, decimal
- short
- int, long, float, double, or decimal
- ushort
- int, uint, long, ulong, float, double, or decimal
- int
- long, float, double, or decimal.
Conversão Implícita
Definições
- uint
- long, ulong, float, double, or decimal
- long
- float, double, or decimal
- ulong
- float, double, or decimal
- char
- ushort, int, uint, long, ulong, float, double, or decimal
- float
- double
2801
Fundamentos do C#
Conversão Explícita
Conversão Explícita
Definições
- Ocorre quando os tipos não são compatíveis
- É dada pelo uso do tipo entre parênteses antes da atribuição
- Segue as mesmas regras anteriores
intinteiro = 100;
uintinteiroSemSinal = (uint)inteiro;// Conversão explícita
2801
Fundamentos do C#
Parse
Parse
Definições
- Método presente em todo tipo primitivo
- Usado para converter um caractere ou string para um tipo qualquer
- Caso haja alguma incompatibilidade, gera um erro
intinteiro = int.Parse("100");
2801
Fundamentos do C#
Convert
Convert
Definições
- Similar ao parse visto anteriormente
- Porém permite converter vários tipos de valor
- Não apenas string
- Devemos informar o tipo na chamada da conversão
intinteiro = Convert.ToInt32("100");
2801
Fundamentos do C#
Operadores Aritméticos
Operações Aritméticas
Definições
- Soma => +
- Subtração => -
- Multiplicação => *
- Divisão => /
Definições
- Em caso de uso de números inteiros
- Se o valor for real, será arredondado
- 4.4 => 5
Definições
- Utilizamos parênteses para redefinir a ordem de execução
int x = 2 + 2 * 2; // 6
int y = 2 + (2 * 2);// 6 – Mesmo do anterior
int z = (2 + 2) * 2; // 8 – Executou a soma primeiro
2801
Fundamentos do C#
Operadores de Atribuição
Operações de Atribuição
Definições
- Utilizamos igual para atribuir um valor
- Porém, podemos utilizar igual junto a um operador aritmético
- x += 5 é o mesmo que x = x + 5
Fundamentos do C#
Operadores de Comparação
Operações de Comparação
Definições
- Podemos comparar qualquer tipo de dado
- Números, strings, bytes
- A comparação SEMPRE retorna verdadeiro ou falso
- True ou False
Operações de Comparação
Definições
- Igual
- ==
- Diferente
- !=
- Maior que
- >
- Menor que
- <
- Maior ou igual a
- >=
- Menor ou igual que
- <=
Operações de Comparação
int x = 25;
x == 0;// False
x != 0;// True
x > 0;// True
x < 0;// False
x <= 0;// False
x >= 0;// True
2801
Fundamentos do C#
Operadores Lógicos
Operações Lógicos
Definições
- Usado para operações condicionais
- Retorna SEMPRE verdadeiro ou falso
- E – and
- Deve atenter TODAS as condições
- &&
- OU – or
- Se atender uma condição já retorna verdadeiro
- ||
- NEGAÇÃO - not
- !
Operações Lógicos
int x = 12;
bool entre = (x > 25) && (x < 40);// False
bool ou = (x > 25) || (x < 40);// True
bool negacao = !(x < 25);// False
2801
Fundamentos do C#
Estruturas Condicionais: If
Estrutura Condicional: If
Definições
- Tradução: “SE” ou seja, “caso alguma condição seja atendida”
- Utilizado para tomada de decisões
- Utiliza os operadores lógicos
Estrutura Condicional: Else
Definições
- Complemento ao if
- Caso a condição não seja atendida
- Podemos ter
- else if(condição)
- Não tem limites (Mas cuidado)
- Podemos ter apenas else para executar algo caso a condição seja atendida
Operações Lógicos
Fundamentos do C#
Estruturas Condicionais: Switch
Estrutura Condicional: Switch
Definições
- Utilizado quando temos muitas decisões
- Executado em cascata
- Devemos parar manualmente a execução com o comando break
- Possui uma execução padrão chamada default
Operações Lógicos
int valor = 1;
switch (valor)
{
case 1: Console.WriteLine("1"); break;
case 2: Console.WriteLine("2"); break;
case 3: Console.WriteLine("3"); break;
default: Console.WriteLine("4"); break; // Se não for 1,2 ou 3
}
2801
Fundamentos do C#
Laços de Repetição: For
Laços de Repetição: For
Definições
- Tradução “para”, ou seja, para cada item em um valor...
- Executa uma determina ação várias vezes
- Definido pela palavra for
- Exige 3 parâmetros
- Contador
- Condição
- Incremento
Laços de Repetição: For
Definições
- for (var i = 0; i <= 5; i++)
Laços de Repetição: For
// Conta de 0 a 5
for (var i = 0;i <= 5;i++)
Console.WriteLine(i);
// Conta de 1 a 5
for (var i = 1;i <= 5;i++)
Console.WriteLine(i);
// Conta de 0 a 4
for (var i = 0;i < 5;i++)
Console.WriteLine(i);
// Conta de 5 a 0
for (var i = 5;i >= 0;i--)
Console.WriteLine(i);
2801
Fundamentos do C#
Laços de Repetição: While
Laços de Repetição: While
Definições
- Tradução: “Enquanto”, ou seja, enquanto uma condição for verdadeira...
- Definido pela palavra while
- Exige apenas uma condição
- Checa a condição ANTES de executar
Laços de Repetição: While
var valor = 0;
// Conta de 0 a 5
// Exibe de 0 a 5 na tela
while (valor <= 5)
{
Console.WriteLine(valor);
valor++;
}
Laços de Repetição: While
valor = 0;
// Conta de 0 a 5
// Exibe de 1 a 6 na tela
while (valor <= 5)
{
valor++;
Console.WriteLine(valor);
}
Laços de Repetição: While
valor = 0;
//Infinito
while (true)
{
valor++;
Console.WriteLine(valor);
}
2801
Fundamentos do C#
Laços de Repetição: Do
Laços de Repetição: Do
Definições
- Tradução: “Faça”, ou seja, realiza uma ação enquanto...
- Definido pela palavra do/while
- Exige apenas uma condição no while
- Checa a condição DEPOIS de executar
Laços de Repetição: Do
var valor = 0;
do
{
Console.WriteLine("Teste");
valor++;
} while (valor < 5);
2801
Fundamentos do C#
Funções ou Métodos
Funções ou Métodos
Definições
- Podemos segmentar nosso programa em funções
- Também conhecidos como métodos
- O main é um exemplo de método
- Possui um retorno, um nome e parâmetros
- Esta composição é camada de assinatura
- Começam sempre com maiúscula
Laços de Repetição: Do
// Definição do método
static void MeuMetodo(string parametro)
{
Console.WriteLine(parametro);
}
Laços de Repetição: Do
// Definição do método
// Retorna uma string e recebe vários parâmetros
static string RetornaNome(string nome, string sobrenome)
{
// Retorna o nome e sobrenome
return nome + " " + sobrenome;
}
Laços de Repetição: Do
Fundamentos do C#
Tipos de Referência e Tipos de Valor
Heap e Stack
Definições
- A memória é dividida em duas partes, Heap e Stack
- Heap armazena os dados
- Stack armazena as referências para os dados
Value Types
Definições
- Qualquer tipo no .NET é tratado como
- Tipo de Referência (Reference Type)
- Tipo de Valor (Value Type)
- Tipos de valor armazenam dados
- São armazenados em um local da memória chamada Stack
Value Types
Definições
- Quando armazenamos um valor, a memória é alocada
- Este espaço armazena o dado criado
- Nossa variável acessa este dado diretamente
- Se assimilarmos uma variável do tipo de valor a outra
- O valor será COPIADO
- Ambas serão independents
- Built-in, Structs, Enums
- Garbage Collector não acessa o Stack
Value Types
int x = 25;
int y = x; // Y é uma cópia de X
Console.WriteLine(x);// 25
Console.WriteLine(y);// 25
x = 32;// Somente X foi alterado
Console.WriteLine(x);// 32
Console.WriteLine(y);// 25
Reference Types
Definições
- Armazenam o endereço do objeto que contém os dados
- Não armazena os dados em si
- São armazenados em um local da memória chamado de Heap
- Ao assimilar uma variável
- Criará uma referência
- Aponta para a mesma informação
- Não são independentes
- Quando não mais utilizados são marcados para exclusão
- Garbage Collector passa removendo todos eles
- Classes, Objects, Arrays…
Reference Types
Console.WriteLine(arr[0]);
Console.WriteLine(arr2[0]);
Fundamentos do C#
Structs
Structs
Definições
- Tipos de dado estruturado
- Apenas a estrutura, o esqueleto
- Tipo de valor
- Armazenam apenas outros tipos de dados
- Definido pela palavra struct
- Composto de propriedades e métodos
- Nome sempre com maiúsculo
- O mesmo para propriedades e métodos
- Criado a partir da palavra new
- Neste momento sim temos os valores
Structs
Definições
- A anatomia de uma estrutura normalmente é
struct Product
{
// Propriedades
// Métodos
}
Structs
Definições
- Anatomia de uma propriedade
struct Product
{
// Propriedades
public int Id;
// Métodos
}
Structs
Definições
- Anatomia de um método
struct Product
{
public intId;
public float Price;
Definições
- Para criar uma estrutura
Definições
- Vem com dados dos tipos padrão
- Para preencher os dados
Definições
- Método construtor é um método com mesmo nome da struct
struct Product
{
public Product(intid, string title, float price)
{
Id = id;
Title = title;
Price = price;
}
}
Structs
Definições
- Eles facilitam a criação de estruturas
Fundamentos do C#
Enumeradores
Enumeradores
Definições
- Usado para fornecer uma melhor visualização do código
- Substituem o uso de inteiros
- Usados em listas curtas
- Usados em dados fixos
- Hard Coded
- Sempre em maiúsculo
- Começar com a letra E
Enums
Definições
- Anatomia de um enumerador
enum EEstadoCivil
{
// Enumeradores
}
Enums
Definições
- Anatomia de um enumerador
enum EEstadoCivil
{
Solteiro = 1,
Casado = 2,
Divorciado = 3
}
Enums
Definições
- Uso de um enumerador
struct Cliente
{
public string Nome;
public EEstadoCivil EstadoCivil;
}
Enums
Definições
- Uso de um enumerador
Definições
- Exibindo dados de um enumerador
Console.WriteLine(cliente.Nome);
Console.WriteLine(cliente.EstadoCivil);// Escreve Casado
Console.WriteLine((int)cliente.EstadoCivil);// Escreve 2
2801
Fundamentos do C#
Revisão
Revisão