C# Completo – Programação Orientada a Objetos + Projetos
Fundamentos para estudar:
Lógica de Programação (Estrutura de Dados, POO, Banco de Dados, Análise e Designe de Sistemas)
Comercial(Back End, Web, Mobile, Desktop, Games)
Cursos:
Estrutura de uma aplicação .Net
Estrutura de um programa C#
Criar variável
Funções
Saída de Dados
Placeholders, ,Interpolação, Concatenação
Operadores de Atribuição
Entrada de Dados
Split
Converter a entrada de dados
Operadores comparativos e lógicos
Estrutura Condicional IF – ELSE
HORAS/DATAS
Funções
Debugging
While
For
C# - linguagem de programação
.NET – plataforma de desenvolvimento podendo usar outras linguagens de programação. É composto por BCL
(Bibliotecas de classes base) e CLR (Commom Language Runtime). É uma máquina virtual que executa os programas
Linguagens Compiladas = C, C++
Linguagens Interpretadas = PHP, JavaScripts
Linguagens Compiladas + Maquina Virtual = C#, Java
Estrutura de uma aplicação .Net
As classes são agrupadas em Namespaces (agrupamento lógico de classes relacionadas)
Assembly (DLL ou EXE) - Projetos = Agrupamento físico de classes relacionadas (build)
Aplicação - Solução = agrupamento de Assembly
Estrutura de um programa C#
Solução = .sln
Projeto = .csproj
Classe = .cs
[Link] pertence ao namespace System, por isso a necessidade de dar um using nele
Main = entrepoint da aplicação, onde começa a execução
Identação automática = Ctrl + K + D
Cw + tab + tab = Preenche o [Link] automaticamente
Criar variável
Int nomevariavel = 3;
String nome = “Noellen Samara”;
Object obj1 = “Oi”; //Objeto genérico
Var nome = “Noellen”; //assume qualquer tipo
Funções
[Link] = pega o menor valor do int
[Link] = pega o maior valor do int
Saída de Dados
[Link](valor);
[Link](valor);
[Link]([Link](“F2”)); //f2 mostra a qtd de casas decimais
Se quiser formatar um double com o ponto de separador de decimais
Using [Link];
[Link]([Link](“F2”, [Link]));
Placeholders {} lugar pra entrar valor de variável ,Interpolação ou Concatenação
Exemplos:
Operadores de Atribuição
=
+= , -+ , *= , /= , %=
++ , --
Conversão Implícita e Casting
Casting = conversão explícita
Entrada de Dados
[Link]("Informe seu nome");
string nome = [Link]();
[Link]("O nome é " + nome);
Split
(vetor) – vamos supor que quer digitar 3 palavras e armazenar em 3 variáveis diferentes
Converter a entrada de dados
Operadores comparativos
== igual
!= diferente
>, <, <=, >=
Operadores lógicos
&& = E
|| = OU
! = Não
Estrutura Condicional IF – ELSE
HORAS/DATAS
Funções
processamento que possui um significado
Ex: [Link] = raiz quadrada
Debugging
F9 – cria um breakpoint
F5 – executa passo a passo
F10 – vai executando passo a passo
Shif + f5 – interrompe o debug
F11 – entra na função
Shift + f11 – sair do método em execução
While
For
Orientação a objeto
Classe é um tipo estruturado que pode conter (membros):
Atributos (dados/campos)
Métodos (funções/operações)
A classe também pode prover muitos outros recursos, tais como:
Construtores
Sobrecarga
Encapsulamento
Herança
Polimorfismo
Exemplos:
Entidades: Produtos, Cliente, Triangulo
Serviços: ProdutoService, ClienteService, EmailService, StorageService
Controladores: ProdutoController, CLienteController
Utilitários: Calculadora, compactador
Outros(views, repositórios, gerenciadores, etc)
Nome de atributo e classe começa com letra maiúscula
Exemplo – Classe e Método
ToString
Define o formato da mensagem, sem ter que repetir várias vezes
Toda classe em C# é uma subclasse da classe Object
Object possui os seguintes métodos:
GetType – retorna o tipo do objeto
Equals – compara se o objeto é igual a outro
GetHashCode – retorna um código hash do objeto
ToString – converte o objeto para string
Chamada:
Membros Estáticos
Membros = atributos(características) e métodos(funções/operações)
O que não é estático, são membros de instância
Aplicações comuns: Classes utilitárias ou constantes
Exemplo: [Link] – não precisa ser instanciado. Math é uma classe, e chamamos o método Sqrt
Classes estáticas não podem ser instanciadas
Exemplo:
Construtores
Qdo se da o comando “new”, é qdo ele executa. Produto p = new Produto();
Serve para iniciar valores nos atributos. Permitir ou obrigar que o objeto receba dados / dependências no momento
de sua instanciação (injeção de dependência)
Chamada:
Declaração:
Sobrecarga
Chamada
Declaração
Sintaxe alternativa para inicializar valores de um objeto
A sintaxe funciona mesmo se a classe não tiver construtores
Ctrl + espaço = O Visual Studio indica os campos para colocar na hora de instanciar a classe(construtores)
This
This é uma referencia para o próprio objeto
Uso comum:
Diferenciar atributos de variáveis locais
Referenciar outro construtor em um construtor
Passar o próprio objeto como um parâmetro/argumento na chamado de um método ou construto
Padrão de Nomes:
Variável – letra minúscula
Atributos – letra maiúscula
Vamos supor que cria um construtor com o atributo e o parâmetro com o mesmo nome, precisa colocar o this para
diferenciar o objeto: Isso quer dizer que o atributo recebe o parametro
Referenciar outro construtor em um construtor:
Próprio objeto como parâmetro na chamada de um método ou construtor
Encapsulamento
As classes devem ser privadas
Não permitir que a qualquer momento alterem valores de atributos, só pode permitir através dos métodos
Qdo coloca private num atributo, quer dizer que ele é privativo, não pode mais ser acessado por outra classe
Use o padrão de nome _ e letra minuscula
Forma de fazer a chamada:
Forma de criar os métodos
Properties
São definições de métodos encapsulados, expondo uma sintaxe similar à de atributos e não de métodos (Não precisa
criar os métodos Get/Set igual ensinado acima)
Declaração:
Chamada:
Auto Properties
É uma forma simplificada de se declarar propriedades que não necessitam de lógicas particulares para as operações
get e set
Prop + tab + tab monta a estrutura: public int MyProperty { get; set; }
Chamada:
Declaração – a alteração de preço só está permitida ocorrer no método AlterarPreco, a de quantidade está liberada
Ordem sugerida para implementação de membros
Atributos privados
Propriedades autoimplementadas
Construtores
Propriedades customizadas
Outros métodos da classe
Modificadores de acesso
O que podem acessar:
Public – classes na solução toda
Protectec internal – classe de outro projeto não consegue acessar
Internal – a própria classe e subclasse
Protected – apenas na mesma classe e subclasses por toda solução
Private protected – apenas a classe e subclasse
Private – apenas na classe
Tipo referência e tipo valor
Garbage Collector
Gerenciamento de memória – desaloca objetos
Nullable
Para ser opcional o uso de valores nulos
[Link] da erro, é obrigatório que tenha valor, pode colocar com if
Operador de coalescência nula “??”
Vetores
Todos os elementos do vetor são do mesmo tipo
Começa da posição 0
Exemplo de vetor de variável (tipo struct)
Exemplo de vetor de Classe (tipo referência)
Definição das características da classe
Definição e uso do vetor
Exercício resolvido – destaque a validação se a posição do vetor é nula
Modificador de parâmetros params
Passar um vetor como parâmetro na chamada de um método
Declaração do método com vetor
Chamada do método
Modificador de parâmetros ref e out
Chamada
Declaração
Boxing e unboxing
Boxing – converter um objeto tipo valor para um do tipo referência
Unboxing – converte um objeto de tipo referencia para um do tipo valor compatível
Foreache
Percorre coleções (vetores, listas...)
Listas
Exemplo de coleção. Já inicia vazia.
Tem acesso sequencial, mais lento que vetor
Tamanho variável
namespace Listas
{
class Program
{
static void Main(string[] args)
{
// ----------> declarar e já instanciar a lista
List<string> lista = new List<string>();
//[Link](new Produto(....colocaria os valores dos produtos)) pode ser uma lista de
Classe(referencia) tbm
[Link]("Maria"); //add adiciona do inicio ao final da lista
[Link]("Alex");
[Link]("Bob");
[Link](2, "Marco"); //com o insert, é possível definir a posição de cada elemento,
exemplo "2"
foreach (string obj in lista) //leitura da lista
{
[Link](obj);
}
[Link]("O tamanho da lista é " + [Link]); //contador de registros da
lista
string s1 = [Link](Test); //o Find recebe como argumento uma função com o que
queremos, no caso retornar um nome que comece com A
[Link]("Primeiro nome com A: " + s1);
//OU abaixo tem exemplo de expressão lambda
s1 = [Link](x => x[0] == 'M');
[Link]("Primeiro nome com M: " + s1);
string s2 = [Link](x => x[0] == 'M');
[Link]("O último nome com M:" + s2);
//Posição
int pos1 = [Link](x => x[0] == 'M');
[Link]("Posição começando com M: " + pos1);
pos1 = [Link](x => x[0] == 'M');
[Link]("Última começando com M: " + pos1);
[Link]("--------------------");
//Retornar todos com os filtros determinados, no caso nomes com tamanho 5
List<string> lista2 = [Link](x => [Link] == 5);
foreach (string obj in lista2)
{
[Link](obj);
}
[Link]("--------------------");
//Remover itens da lista
[Link]("Bob");
foreach (string obj in lista) //leitura da lista
{
[Link](obj);
}
[Link]("--------------------");
//Remove todos conforme condição
[Link](x => x[0] == 'M');
foreach (string obj in lista) //leitura da lista
{
[Link](obj);
}
[Link]("--------------------");
//Remover pela posição
[Link](0);
foreach (string obj in lista) //leitura da lista
{
[Link](obj);
}
static bool Test(string s)
{
return s[0] == 'A';
}
}
}
Exemplo de lista de Classe:
namespace Exe1Lista
{
class Program
{
static void Main(string[] args)
{
[Link]("Informe o número de funcionários");
int qtdFunc = [Link]([Link]());
List<Funcionario> lista = new List<Funcionario>();
int i;
for (i = 0; i < qtdFunc; i++)
{
[Link]("Informe o ID: ");
int id = ([Link]([Link]()));
[Link]("Informe o nome: ");
string nome = [Link]();
[Link]("Informe o Salario: ");
double salario = ([Link]([Link]()));
[Link](new Funcionario(id, nome, salario));
}
[Link]("Qual id deseja alterar o salário?");
int funcAltSal = [Link]([Link]());
[Link]("Qual a porcentagem?");
double porcentagem = [Link]([Link]());
Funcionario alterFuncLista = [Link](x => [Link] == funcAltSal);
if (alterFuncLista != null)
{
[Link](porcentagem);
}
else
[Link]("Funcionario não existe");
foreach (Funcionario obj in lista)
{
[Link]("Dados Atualizados: " + obj);
}
}
}
Matrizes
A posição possui linha/coluna
Inferência de tipos
Var numero = 30;
A variável vai assumir o tipo da variável conforme seu valor
Switch Case:
Expressão Ternária
Funções interessantes para string
Pesquisar formatações do ToString
DateTime
Date(DateTime)
Day (int)
DayOfWeek(DayOfWeek)
DayOfYear(int)
Hour(int)
Kind
(DateTimeKind)
Milisecond(int)
Minute(int)
Month(int)
Second(int)
Ticks(long)
TimeOfDay(TimeSpan)
Year(int)
TIMESPAN
GIT
Sistema de versionamento
Commit = são as versões
Enumerações
É um tipo especial que serve para especificar um conjunto de constantes. É um tipo valor
Exemplo: Se quer representar os dias da semana,melhor colocar o dia, em vez de número. O compilador não vai
deixar colocar um valor fora do definido
Exemplo 2: Status do pedido: Pendente, Processando, Enviado e Entregue
Prop + tab tab = pra gerar a estrutura com get;set;
Design
Categorias de classes:
Views = telas do sistema (Forms)
Controladores = faz o meio de campo entre tela e sistema (Controllers)
Entidades = Produtos, Pessoa, Pedido... (Entities)
Serviços (Services)
Repositórios = acesso a banco de dados (Repository)
Composição
Uma associação que permite que um objeto contenha outro
Representada por um diamante preto
Exercício Resolvido 01
Gerar construtor automaticamente
Sempre que tiver uma associação para-muitos (List) não vai incluir no construtor
REFAZER ESSE EXERCICIO
Seção 10 – Herança e Polimorfismo
Herança é um tipo de associação para uma classe herdar dados e comportamentos de outra
Sintaxe “:” extende
Vantagens – reuso
Super classe (classe base) / subclasse (classe derivada)
Herança é uma associação entre classes, e não entre objetos
Na classe base são declarados as propriedades e métodos
Na classe filha : Classe Base, e no método usa o base pra usar os atributos da classe principal
Protected permite modificar nas subclasses, mas não nas outras
Upcasting e Downcasting
Upcasting = polimorfismo
Downcasting = as is casting de superclasse para subclasse
Sobreposição
É possível fazer tbm a sobreposição, acrescentando outras funções em método já existente
Começa digitar override, que aparece pra selecionar métodos virtual
Classes e métodos selados
Palavra chave:sealed
É uma classe que não pode ser herdada
Métodos que já foram sobrescritos, podem ser impedidos de sobrescrever novamente
Classe abstrata
Classes que não podem ser instanciadas
Somente subclases não abstratas podem ser instanciadas, nunca a superclasse
Namespace Curso{
abstratct class Aluno {
....
Exemplo: um banco permite que apenas contas poupanças e jurídicas podem ser instanciadas, e não contas comum
Métodos Abstratos
São métodos que não possuem implementação
Notação UML: itálido
Mto utilizada para Polimorfismo
Módulo 11 – Tratamento de Exceções
Exceção – condição de erro ou comportamento inesperado durante a execução
Herda da classe [Link]
Bloco try = contem a parte que contem o código a ser executado
Bloco catch (capturar) = contem o que fazer, caso ocorra uma exceção. Pode ter vários catch
Try
Catch(ExceptionType e)
Quando mostra uma exceção, mostra qual foi o tipo dado, conforme a tabela acima, note abaixo numa divisão de 10
por 0
Para tratar, faça o seguinte:
Dessa forma o programa não travou, e retornou a mensagem de erro.
O Exception é genérico, pode tratar especificamente a mensagem de erro:
Outro exemplo: Erro com formato letra x numero
Informei letra no lugar do número, deu o erro:
Finally = quando, independente se deu certo ou não, deve executar uma ação:
Exemplo: Abrir e fechar um arquivo
Exceções Personalizadas
Mod 13 – Trabalhando com Arquivos
Classe File: chama simplemente colocando [Link]ção – não precisa instanciar o objeto, um pouco mais lenta
Classe FileInfo : tem que instanciar, mas é mais rápida
IOException: Superclasse de todas as exceções possíveis que podem acontecer qdo vai mexer com arquivo
FileStream = permite leitura e escrita
Stream = sequencia de dados
StreamReader = capaz de ler caracteres de forma binária
Block = garante que os objetos IDisposable serão fechados, exemplo> Font, FileStream, StreamReader, StreamWriter
Interfaces
Tipo de conjunto de operações que uma classe deve implementar
Generics