Você está na página 1de 51

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

Console.WriteLine 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 Console.WriteLine 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
Int.MinValue = pega o menor valor do int

Int.MaxValue = pega o maior valor do int

Saída de Dados
Console.WriteLine(valor);

Console.Write(valor);

Console.WriteLine(valor.ToString(“F2”)); //f2 mostra a qtd de casas decimais

Se quiser formatar um double com o ponto de separador de decimais

Using System.Globalization;

Console.WriteLine(valor.ToString(“F2”, CultureInfo.InvariantCulture));

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
Console.WriteLine("Informe seu nome");
string nome = Console.ReadLine();

Console.WriteLine("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: Math.Sqrt = 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: Math.Sqrt – 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

x.Value 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>();

//lista.Add(new Produto(....colocaria os valores dos produtos)) pode ser uma lista de


Classe(referencia) tbm
lista.Add("Maria"); //add adiciona do inicio ao final da lista
lista.Add("Alex");
lista.Add("Bob");
lista.Insert(2, "Marco"); //com o insert, é possível definir a posição de cada elemento,
exemplo "2"

foreach (string obj in lista) //leitura da lista


{
Console.WriteLine(obj);
}

Console.WriteLine("O tamanho da lista é " + lista.Count); //contador de registros da


lista
string s1 = lista.Find(Test); //o Find recebe como argumento uma função com o que
queremos, no caso retornar um nome que comece com A
Console.WriteLine("Primeiro nome com A: " + s1);

//OU abaixo tem exemplo de expressão lambda

s1 = lista.Find(x => x[0] == 'M');


Console.WriteLine("Primeiro nome com M: " + s1);

string s2 = lista.FindLast(x => x[0] == 'M');


Console.WriteLine("O último nome com M:" + s2);

//Posição
int pos1 = lista.FindIndex(x => x[0] == 'M');
Console.WriteLine("Posição começando com M: " + pos1);

pos1 = lista.FindLastIndex(x => x[0] == 'M');


Console.WriteLine("Última começando com M: " + pos1);

Console.WriteLine("--------------------");

//Retornar todos com os filtros determinados, no caso nomes com tamanho 5


List<string> lista2 = lista.FindAll(x => x.Length == 5);
foreach (string obj in lista2)
{
Console.WriteLine(obj);
}

Console.WriteLine("--------------------");

//Remover itens da lista


lista.Remove("Bob");
foreach (string obj in lista) //leitura da lista
{
Console.WriteLine(obj);
}

Console.WriteLine("--------------------");

//Remove todos conforme condição


lista.RemoveAll(x => x[0] == 'M');
foreach (string obj in lista) //leitura da lista
{
Console.WriteLine(obj);
}

Console.WriteLine("--------------------");

//Remover pela posição


lista.RemoveAt(0);
foreach (string obj in lista) //leitura da lista
{
Console.WriteLine(obj);
}

static bool Test(string s)


{
return s[0] == 'A';
}

}
}
Exemplo de lista de Classe:

namespace Exe1Lista
{
class Program
{
static void Main(string[] args)
{
Console.Write("Informe o número de funcionários");
int qtdFunc = int.Parse(Console.ReadLine());

List<Funcionario> lista = new List<Funcionario>();

int i;
for (i = 0; i < qtdFunc; i++)
{

Console.Write("Informe o ID: ");


int id = (int.Parse(Console.ReadLine()));

Console.Write("Informe o nome: ");


string nome = Console.ReadLine();

Console.Write("Informe o Salario: ");


double salario = (double.Parse(Console.ReadLine()));

lista.Add(new Funcionario(id, nome, salario));


}

Console.Write("Qual id deseja alterar o salário?");


int funcAltSal = int.Parse(Console.ReadLine());

Console.Write("Qual a porcentagem?");
double porcentagem = double.Parse(Console.ReadLine());
Funcionario alterFuncLista = lista.Find(x => x.Id == funcAltSal);
if (alterFuncLista != null)
{
alterFuncLista.AlterarSalario(porcentagem);
}
else
Console.WriteLine("Funcionario não existe");

foreach (Funcionario obj in lista)


{
Console.WriteLine("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 System.Exception


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 File.operaçã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

Você também pode gostar