Buscar

Curso C#

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 130 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 130 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 130 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

PROGRAMAÇÃO EM 
C#
Cronograma
• Ambiente de Programação
• Visual Studio
• Programação em C#
• Bibliotecas
• Extensão
• Função principal
• Variáveis
• Leitura e escrita
• Exercícios
Ambiente de Programação
• Visual Studio 2017 COMMUNITY
• Gratuito
• https://www.visualstudio.com/pt-br/vs/community/
Instalação
Ambiente de Programação
Motivação - Linguagem C#
- Criada por Anders Hejlsberg na Microsoft
- Apresentada publicamente em 2000 junto com o 
lançamento do .NET Framework
- Linguagem Orientada a Objetos
- Suporte a internacionalização
- Portável 
- Roda em servidores, sistemas embarcados, celulares, 
smartdevices etc.
- Não roda somente em Windows
- Utilizada em diversos tipos de sistemas
- Web
- Jogos
- Sistemas Embarcados
Motivação - Linguagem C#
- Fortemente Tipada
- Compilador e IDE "inteligentes"
Quem usa?
Primeiro programa em C#
using System;
namespace HelloWorld
{
 class Program
 {
 static void Main(string[] args)
 {
 Console.WriteLine("Olá!");
 }
 }
}
•
Variáveis em C#
•Servem para armazenar informações durante a 
execução do programa
•
•Algumas regras para utilizar variáveis:
•Quanto ao nome:
• Devem iniciar com uma letra 
• Os caracteres subsequentes podem ser letras, números ou _
• Dica (para facilitar a leitura):
• Utilizar letras minúsculas para variáveis
• A segunda palavra inicia com maiúscula 
float valorCarro;
• Utilizar letras MAIÚSCULAS para constantes
Variáveis
using System;
namespace Aula01
{
 class Program
 {
 static void Main(string[] args)
 {
 String nome = "Guilherme";
 int idade = 29;
 String email = "guilherme.defreitas@gmail.com";
 }
 }
}
Variáveis vs constantes
• Variáveis tem valor variável, constantes tem valor fixo
• Variáveis são declaradas no corpo do programa
• Constantes são declarados como:
• const int NOME_DA_CONSTANTE = 10;
Tipos primitivos de variáveis - C#
• Em C# podemos ter diversos tipos de variáveis
Data Type Range
byte 0 .. 255
sbyte -128 .. 127
short -32,768 .. 32,767
ushort 0 .. 65,535
int -2,147,483,648 .. 2,147,483,647
uint 0 .. 4,294,967,295
long -9,223,372,036,854,775,808 .. 9,223,372,036,854,775,807
ulong 0 .. 18,446,744,073,709,551,615
float -3.402823e38 .. 3.402823e38
double -1.79769313486232e308 .. 1.79769313486232e308
decimal -79228162514264337593543950335 .. 
79228162514264337593543950335
char A Unicode character.
string A string of Unicode characters.
bool True or False.
object An object.
Tipos de variáveis – C#
• Utilizaremos também outros tipos de variáveis
• Int16
• Int32
• Int64
• String
• DateTime
String
O tipo String é o tipo de dado utilizado para armazenar 
texto. 
...
String nomeDoCliente = "Zezinho"; 
...
Obs: o tipo primitivo char serve apenas para armazenar 
um único caracter e não pode armazenar texto. 
Float
O tipo float é o tipo de dado utilizado para armazenar 
números reais. 
...
float medidaAltura = 1.97f; 
...
Repare que é necessário colocar o “f” no final do valor 
atribuído. Isso é necessário pois no c# qualquer valor 
real é um por padrão um double e para avisá-lo de que 
é um float colocamos o f.
Decimal
O tipo Decimal também é utilizado para armazenar 
números reais, mas possui uma precisão muito superior 
do que o double ou float. Isso o torna o tipo de dado ideal 
para tratar valores monetários.
...
Decimal precoProduto = 99.90d; 
...
Repare que é necessário colocar o “d” no final do valor 
atribuído. Isso é necessário pois no c# qualquer valor real 
é um double e para avisá-lo de que é um Decimal 
colocamos o d.
Declaração de variáveis
• Declaração e inicialização de variáveis
• Antes de utilizar uma variável ela deve ser declarada e inicializada
• A declaração é feita da seguinte forma:
String nome = “Guilherme”;
ou pode ser inicializada posteriormente
String nome;
...
nome = “Guilherme”;
• Inicializar significa atribuir algum valor:
• int cont=0;
• As variáveis precisam ser inicializadas antes de serem utilizadas.
Escrevendo na tela
Para escrever um dado no console (tela preta) é utilizada o 
comando Console. O comando Environment.NewLine ou 
\n podem ser usado para quebrar linhas.
static void Main(string[] args)
{
 //Escreve uma mensagem na tela
 Console.WriteLine("Bem vindos ao curso de C#!");
 //Evita que o programa feche 
 Console.ReadLine();
}
Escrevendo na tela
Podemos juntar (concatenar) diferentes variáveis em uma mesma 
saída. Existem algumas formas de fazer isso.
1) Utilizando o operador +
String nome = "Guilherme";
String sobrenome = "Defreitas";
Console.WriteLine("O sobrenome do " + nome + " é " + sobrenome);
Console.ReadLine();
2) Utilizando o índice de posição
String nome = "Guilherme";
String sobrenome = "Defreitas";
Console.WriteLine("O sobrenome do {0} é {1} ", nome, sobrenome);
Console.ReadLine();
3) Utilizando interpolação (funciona apenas no visual studio 2017)
String nome = "Guilherme";
String sobrenome = "Defreitas";
Console.WriteLine($"O sobrenome do {nome} é {sobrenome}.");
Console.ReadLine();
Escrevendo números na tela
Podemos informar quantas casas antes e depois do separador decimal 
utilizando o comando:
Decimal valor = 100.99d;
Console.WriteLine("O valor é de {0:0.00} ", valor);
Console.ReadLine();
Dessa forma só serão exibidos 2 dígitos após a vírgula
Escrevendo na tela
A saída pode ser formatada utilizando o método String.Format
String nome = "Zezinho";
Console.Write(String.Format("Nome: {0, 20} ", nome));
Console.Write(String.Format("Idade: {0, 5}", 30));
Neste caso a palavra “Zezinho” será mostrada ocupando 20 posições e 
a idade ocupando 5, independentemente de quantas letras ou números 
a variável possui.
Escrevendo na tela
using System;
namespace DemoConsole
{
 class Program
 {
 static void Main(string[] args)
 {
 String nomeCurso = "Mini Curso de C#";
 Console.WriteLine(nomeCurso);
 Console.WriteLine("A disciplina de {0} é {1}", "programação", "a melhor de todas");
 Console.Write(String.Format("Nome: {0, 20} ", "Zezinho"));
 Console.Write(String.Format("Idade: {0, 5}", 30));
 Console.ReadLine();
 }
 }
}
Exercícios
1. Declarar 3 variáveis de tipos diferentes no bloco Main.
2. Imprimir o valor da variável utilizando Console.WriteLine.
3. Tentar declarar duas variáveis com o mesmo nome.
Lendo dados do usuário
 Utilizamos o comando Console.ReadLine() para ler os 
dados informados pelo usuário. Esse comando espera 
até que o usuário aperte ENTER para capturar os dados 
e prosseguir na execução das demais operações do 
programa.
Lendo dados do usuário
using System;
namespace HelloWorld
{
 class Program
 {
 static void Main(string[] args)
 {
 Console.WriteLine("Digite o seu nome:");
 String nome = "";
 nome = Console.ReadLine();
 Console.WriteLine("Bem vindo " + nome);
 Console.ReadLine();
 }
 }
}
Convertendo dados
Conversões explícitas
long idade = 10;
int novaIdade = (int) idade;
Utilizando Convert
String idade = "20";
int novaIdade = Convert.ToInt32(idade);
Convertendo dados
Função Exemplo Expliçação
Convert.ToInt32(dado) String idade = “18”;
int valorIdade = Convert.ToInt32(idade);
Converte uma variável para 
um inteiro de 32 bits.
Convert.ToInt16(dado) String idade = “18”;
int valorIdade = Convert.ToInt16(idade);
Converte uma variável para 
um inteiro de 16 bits (ou 
short)
Convert.ToInt64(dado) String numeroGrande = “18123124123123123”;
intvalorNumero = Convert.ToInt64(idade);
Converte uma variável para 
um inteiro de 64 bits (ou long)
Convert.ToSingle(dado) String numero = “10,50”;
float valorNumero = Convert.ToSingle(numero);
Converte uma variável para o 
tipo float.
Convert.ToDouble(dado) String numero = “10,50”;
Double valorNumero = Convert.ToDouble(numero);
Converte uma variável para o 
tipo Double.
Convert.ToDecimal(dado) String preco = “199,90”;
Decimal valorPreco = Convert.ToDecimal(preco);
Converte uma variável para o 
tipo Decimal
Se não for possível efetuar a conversão o programa irá disparar uma 
excessão e será interrompido.
Convertendo e validando dados
Ao converter um dado com Convet é possível que o 
dado a ser convertido não seja compatível com 
o tipo de dado desejado. Veja o exemplo 
abaixo:
String idade = "vinte";
int novaIdade = Convert.ToInt32(idade);
Neste caso o programa será encerrado com um 
erro. 
Convertendo e validando dados
Para evitar que isso aconteça é possível converter os dados utilizando o 
TryParse.
String idade = "vinte";
int novaIdade;
bool conseguiu = Int32.TryParse(idade, out novaIdade);
if(conseguiu){
Console.WriteLine("Idade convertida: {0}", novaIdade);
}else{
Console.WriteLine("Você não informou um número");
}
Repare que o TryParse é um método do tipo de dado que se deseja ser 
convertido (nesse caso um Int32). Outra particularidade é que é necessário 
criar a variável de retorno e passá-la como parâmetro utilizando o operador 
out. O método TryParse retorna um valor booleano informando se conseguiu 
efetuar a conversão ou não. Se a conversão puder ser realizada o método 
retorna true e a variável novaIdade passa a assumir o novo valor senão, o 
método retorna false.
Convertendo e validando dados
Segue abaixo alguns exemplos com outros tipos de dados:
Decimal.TryParse(entrada, out saída);
Double.TryParse(entrada, out saída);
Float.TryParse(entrada, out saída);
Int32.TryParse(entrada, out saída);
Boolean.TryParse(entrada, out saída);
Byte.TryParse(entrada, out saída);
Operadores aritméticos
• Para manipular os valores das variáveis utilizamos os 
seguintes operadores:
• As atribuições são feitas com o símbolo =
Operadores
Os operadores permitem manipular as variáveis de um 
programa. A linguagem C# possui os seguintes 
operadores:
- Aritmético (+, -, *, /, %)
- Atribuição (=, +=, -=, *=, /=, %=)
- Relacional (==, !=, <, <=, >, >=)
- Lógico (&&, ||)
Operadores - Aritméticos
Funcionam de forma semelhante aos operadores 
matemáticos.
Soma +
Subtração -
Multiplicação *
Divisão /
Módulo %
Operadores - Aritméticos
...
int resultadoSoma = 10 + 20; //Atribui o valor 30
String nome = "Zezinho" + " Patinhas"; //Pode ser usado com 
Strings
int x, y; //Variáveis de mesmo tipo podem ser declaradas na 
mesma linha
x = 10;
x = x * 2; //x passa a ser 20
y = x / 2; //y passa a ser 10
...
Operadores - Aritméticos
Módulo (%)
Na matemática corresponde ao valor absoluto (sem sinal) 
de um número.
|-5| = 5
Na linguagem de programação o módulo corresponde ao 
resto da divisão de dois números. Exemplo 6%5 = 1.
Operadores - Aritméticos
Na linguagem C# a precedência das operações funciona 
de forma semelhante a matemática. Primeiro as 
multiplicações, divisões e módulos em seguida as 
adições e subtrações.
A precedência pode ser forçada com a utilização de 
parênteses. 
...
int x = x / (6 - 2 + (3 * 5)/(16 - 1)); 
...
Operadores - Atribuição
Simples =
Incremental +=
Decremental -=
Multiplicativa *=
Divisória /=
Modular %=
Pós incremento i++
Pré incremento ++i
Operadores - Atribuição
...
int valor = 1;
valor += 2; //valor = 3
valor -= 1; //valor = 2
valor *= 6; //valor = 12
valor /= 3; //valor = 4
valor %=3 ; //valor = 1
...
Operadores - Atribuição
//As operações de atribuição podem ser escritas utilizando
//operações aritméticas.
...
int valor = 1;
valor = valor + 2; //valor = 3
valor = valor - 1; //valor = 2
valor = valor * 6; //valor = 12
valor = valor / 3; //valor = 4
valor = valor % 3; //valor = 1
...
Operadores - Pré e pós 
incrementos
Qual é o valor mostrado de x? 
Qual é o valor mostrado de i?
...
int i = 5;
int x = i++;
Console.WriteLine(i);
Console.WriteLine(x);
...
Operadores - Pós incrementos
Quando o operador ++ vem após a variável, o valor antigo 
é retornado primeiro e depois é evetuado o incremento 
(pós incremento). Neste caso x = 5.
...
int i = 5;
int x = i++;
Console.WriteLine(i);
Console.WriteLine(x);
...
Operadores - Pré incrementos
Quanto utilizado o pré incremento a variável é 
incrementada e depois o seu valor é retornado. Neste 
caso x = 6.
...
int i = 5;
int x = ++i;
Console.WriteLine(i);
Console.WriteLine(x);
...
Operadores - Relacionais
Igualdade == 
Diferença !=
Menor <
Menor ou igual <=
Maior >
Maior ou igual >=
...
int valor = 2;
bool t = false;
t = (valor == 2); //t = true
t = (valor != 2); //t = false
t = (valor < 2); //t = false
t = (valor <= 2); //t = true
t = (valor > 1); //t = true
t = (valor >= 1); //t = true
...
Operadores - Relacionais
Operadores - Lógicos
Permite verificar se duas ou mais condições são 
satisfeitas. Os operadores lógicos retornam um tipo 
primitivo booleano.
Operador "E" &&
Operador "OU" ||
Operadores - Lógicos
...
int valor = 30;
boolean t = false;
t = valor < 40 && valor > 20; //t = true
t = valor < 40 && valor > 30; //t = false
t = valor > 30 || valor > 20; //t = true
t = valor > 30 || valor < 20; //t = false
t = valor < 50 && valor == 30; //t = true
...
Exercícios
1) Escreva um programa que solicite o valor de um 
produto, a quantidade comprada e mostre o valor total 
da compra.
2) Escreva um programa que dado o raio de um círculo, 
calcule o seu perímetro e a sua área:
perímetro: 2.ᷜ.raio
área: ᷜ.raio²
ESTRUTURAS DE 
DECISÃO
Estruturas de controle de fluxo
•Fundamentais em qualquer linguagem de 
programação
• Como seria um programa sem essas estruturas?
• Para fazer uma repetição teríamos de colocar o mesmo trecho 
de código muitas vezes
• Utilizamos estas estruturas para:
• Testar condições
• Fazer repetições
• Realizar saltos
O comando IF
•Está relacionado ao SE do nosso algoritmo
•SE uma condição é verdadeira executa um 
trecho de código
•A sintaxe do comando é:
• if (condição) declaração;
• A condição é avaliada, se for verdadeira, a declaração 
é executada, se for falso, pula a declaração para a 
próxima linha de código
O comando IF
using System;
namespace HelloWorld
{
 class Program
 {
 static void Main(string[] args)
 {
 Console.WriteLine("Informe um número:");
 String num = Console.ReadLine();
 int numero = Convert.ToInt32(num);
 if (numero > 10)
 {
 Console.WriteLine("O número digitado é maior que 10");
 }
 if (numero == 10)
 {
 Console.WriteLine("O número é igual a 10");
 }
 if (numero < 0)
 {
 Console.WriteLine("O número é menor que 10");
 }
 }
 }
}
O Comando IF-else
•É um complemento do IF
•Podemos ver da seguinte forma:
• if (condição) declaração_1;
• else declaração_2;
•Caso a condição seja verdadeira executa a 
declaração_1, se a negativa dela for verdadeira, 
executa a declaração_2
•Se usarmos IF-ELSE uma das duas sempre 
executará, não existe como não executar
O comando if-else
using System;
namespace HelloWorld
{
 class Program
 {
 static void Main(string[] args)
 {
 Console.WriteLine("Informe um número:");
 String num = Console.ReadLine();int numero = Convert.ToInt32(num);
 
 if (numero == 10)
 {
 Console.WriteLine("O número é igual a 10");
 }
 else
 {
 if (numero > 10)
 {
 Console.WriteLine("O número digitado é maior que 10");
 }
 else
 {
 Console.WriteLine("O número é menor que 10");
 }
 }
 }
 }
}
O comando if-else-if
• Uma extensão da estrutura IF-ELSE
• Podemos utilizar mais de uma condição
• if (condição_1) declaração_1;
• else if (condição_2) declaração_2;
• else if (condição_3) declaração_3;
• .
• .
• .
• else if (condição_n) declaração_n;
• else declaração_default;
O comando if-else-if
using System;
namespace HelloWorld
{
 class Program
 {
 static void Main(string[] args)
 {
 Console.WriteLine("Informe um número:");
 String num = Console.ReadLine();
 int numero = Convert.ToInt32(num);
 if (numero > 10)
 {
 Console.WriteLine("O número digitado é maior que 10");
 }else if (numero == 10)
 {
 Console.WriteLine("O número é igual a 10");
 }else if (numero < 0)
 {
 Console.WriteLine("O número é menor que 10");
 }
 }
 }
}
Condições aninhadas
•Em algumas lógicas, ou algoritmos precisamos 
inserir novas condições quando uma for 
verdadeira
• Para isto podemos utilizar um conjunto de estruturas de 
seleção de forma sequencial
• Uma estrutura dentro de outra
• Assim teremos condições dentro de condições
• Temos de ter cuidado com os elses
Comando switch
•Utilizado para verificar os diversos valores que 
podem ser estabelecidos a uma variável
•Muito usado em menus de escolha
switch (variável)
{
case constante_1:
declaração_1;
break;
case constante_2:
declaração_2;
break;
...
case constante_n:
declaração_n;
break;
default
declaração_default;
}
O comando break faz com que 
o switch seja finalizado assim 
que uma das condições for 
aceita
Comando switch
using System;
namespace HelloWorld
{
 class Program
 {
 static void Main(string[] args)
 {
 Console.WriteLine("Opções:");
 Console.WriteLine("1 - Exercício 1");
 Console.WriteLine("2 - Exercício 2");
 Console.WriteLine("Informe a opção desejada:");
 String num = Console.ReadLine();
 int numero = Convert.ToInt32(num);
 switch(numero)
 {
 case 1: Console.WriteLine("Exercício 1 selecionado");
 break;
 case 2: Console.WriteLine("Exercício 2 selecionado");
 break;
 default: Console.WriteLine("Opção inválida");
 break;
 }
 Console.ReadLine();
 }
 }
}
Operadores relacionais
• Operadores utilizados para comparar duas variáveis
Operadores lógicos
• Utilizados para fazer operações entre elementos lógicos
Exercício
1) Faça um programa em C# que leia a média e a frequência de 
um aluno em programação, e indique se o aluno foi aprovado 
ou reprovado. 
2) Escreva um programa que leia o valor de um item, leia a 
quantidade comprada deste item e leia o valor pago pelo 
cliente. 
- Se o valor pago pelo cliente for menor que o valor total da 
compra (valor do item x quantidade), informe a mensagem 
“Valor pago inferior ao valor total”.
- Se o valor for igual ao valor da compra imprima a 
mensagem “Obrigado, volte sempre!”
- Se o valor for maior do que o valor da compra imprima a 
mensagem “Seu troco é de .....” com o valor do troco.
Códigos
Github:
https://github.com/unisociesc-programacao/poo_exercicios
Estruturas de seleção
• Exercício:
• Dados três valores A, B, C, verificar se eles podem ser os 
comprimentos dos lados de um triângulo. Se forem, verificar se 
compõem um triângulo equilátero, isósceles, ou escaleno. Informar 
se os valores não formarem nenhum triângulo;
• Dados de entrada:
• Três lados de um triângulo;
• Dados de saída:
• Mensagens;
65
Estruturas de seleção
• Exemplo 4 (cont.):
• O que é um triângulo?
• Figura geométrica fechada de três lados, em que cada um é menor que 
a soma dos outros dois.
• O que é um triângulo equilátero?
• O que é um triângulo isósceles?
• O que é um triângulo escaleno?
66
ESTRUTURAS DE 
REPETIÇÃO
Estruturas de repetição - While
Utilizado para repetir um bloco de código enquanto a condição 
booleana especificada como parâmetro para o comando while for 
true.
Testa a condição, executa o código, e testa a condição novamente
...
int contador = 0;
while(contador < 100){
 Console.WriteLine("Bom dia " + contador);
 contador += 1;
}
Console.ReadLine();
...
• Funcionamento semelhante aos laços while
• A grande diferença é “quando” se faz a condicional
• As instruções executam 1 vez, e depois testa a 
condicional para executar a (s) próxima (s)
Sintaxe:
int i = 0;
do
{
 Console.WriteLine("Valor de i: " + i);
 i++;
} while (i < 100);
Console.ReadLine();
Estruturas de repetição Do While
• O principal uso se dá em Menus
• Caso o usuário selecione uma opção que não é válida vai repetir o 
menu até que ele selecione a opção válida
• Exemplo:
• Construir um Menu para que o usuário escolha entre 3 opções, 
caso o usuário selecione um número fora das alternativas, deve 
repetir o menu. Caso selecione o número certo deve imprimir a 
mensagem: Você escolheu a fruta nome_fruta
• 1 é laranja
• 2 é mamão
• 3 é abacate
Estruturas de repetição Do While
Exemplo de Do While
int opcao = 0;
do
{
 Console.Clear();
 Console.WriteLine("Menu: ");
 Console.WriteLine("1 - Exemplo 1 ");
 Console.WriteLine("2 - Exemplo 2 ");
 String opcaoUsuario = Console.ReadLine();
 opcao = Convert.ToInt32(opcaoUsuario);
 switch (opcao)
 {
 case 1: Console.WriteLine("Selecionada a opção 1");
 break;
 case 2: Console.WriteLine("Selecionada a opção 2");
 break;
 default: Console.WriteLine("Opção inválida");
 break;
 }
 Console.WriteLine("Pressione enter para tentar novamente");
 Console.ReadLine();
} while (opcao != 0);
71
Estruturas de repetição
• For 
• Substitui o para
• É um laço de repetição comumente utilizado de forma 
iterativa, usa uma variável de controle para contar o 
número de repetições
• Sintaxe:
for(inicialização ;condicional ;incrementação){
//Comandos
}
72
Estruturas de repetição
•Podemos utilizar laços for em:
•Repetições definidas
• Os comandos internos devem ocorrer por um 
determinado número de vezes
• Número de vezes → associado aos três parâmetros
•Repetições infinitas
• O número de vezes é infinito
• Condicional
•Laços omissos
• O laço irá se repetir, mas sem instruções internas
• Causar pausas
73
Exercício
• A concessionária de veículos está vendendo os seus veículos 
com desconto. Faça um programa que calcule e exiba o valor 
do desconto e o valor a ser pago pelo cliente de vários carros. 
O desconto deverá ser calculado de acordo com o ano do 
veículo. 
• Até 2000 - 12% de desconto
• acima de 2000 - 7% de desconto 
• O sistema deverá perguntar se deseja continuar informando 
veículos e calculando desconto até que a resposta seja “N”
• Após informar “N” o sistema deve exibir:
• o total de carros com ano até 2000 
• o total de carros acima de 2000
• o total de valores (soma de todos os carros)
• o total de descontos 
74/22
Exercícios
• 2 - Escrevaum algoritmo que leia 10 números inteiros 
fornecidos pelo usuário e informe ao final do 
processamento qual foi o maior número fornecido e qual 
foi o menor número fornecido. 
75
Escopo da variável
No C# as variáveis podem ser declaradas a qualquer 
momento no código. Porém, o local da declaração afeta a 
visibilidade da variável.
O escopo da variável é o nome dado ao trecho de código 
em que aquela variável existe e pode ser acessada.
Escopo da variável
...
//Aqui a variável i não existe
int i = 5;
//A partir daqui a variável i existe
while(true){
//O i ainda vale aqui
int j = 7; 
//o j passa a existir
}
//o j não existe mais, mas o i continua existindo
...
Vetores (arrays)
É utilizado para armazenar vários valores de um mesmo 
tipo. 
...
int[] idades; //declaração do array
idades = new int[10] //inicializa do array com 10 posições
idades[5] = 10; //atribui o valor 10 na posição 5
...
10idades
Vetores (arrays)
Um array é sempre um objeto, portanto é sempre uma 
referência.
O índice dos vetores iniciam em 0 (semelhante ao C) e vão 
até n-1 onde n é o tamanho do vetor.
O tamanho do vetor precisa ser especificado no momento 
da inicialização e não pode ser alterado.
Vetores (arrays) - Percorrendo um 
vetor
...
int[] idades = new int[10];
for(int i = 0; i < 10; i++){
 idades[i] = i * 10;
}
//Imprimindo todas as idades
for(int i = 0; i < 10; i++){
 int x = idades[i];
 Console.WriteLine(x);
}
//Forma mais simples de imprimir todas as idades
foreach(int x in idades){
 Console.WriteLine(x);
}
...
Exercício
1) Crie um programa que guarde em um vetor e imprima a o nome de todas as 
disciplinas em que você está matriculado neste semestre.
2) Crie um programa que solicite ao usuário e armazene 5 receitas e 5 
despesas (apenas valores) e no final:
- Imprima o saldo.
 - Imprima a média de receitas
 - Imprima a média de despesas
Matrizes
• São vetores de duas dimensões
//Criando uma matriz vazia
int[,] matriz = new int[10, 10];
//Atribuindo um valor na posição 0, 0.
matriz[0, 0] = 10;
//Criando uma matriz e inicializando
int[,] matriz2D = { { 1, 2, 3 }, { 4, 5, 6 } };
Exercícios
• Crie uma aplicação que realize a seguinte operação:
A + B – C
//Criando uma matriz vazia
int[,] matriz = new int[10, 10];
//Atribuindo um valor na posição 0, 0.
matriz[0, 0] = 10;
//Criando uma matriz e inicializando
int[,] matriz2D = { { 1, 2, 3 }, { 4, 5, 6 } };
Exercícios
• Dada uma matriz de relacionamento onde cada linha e cada coluna 
correspondem a uma pessoa, o valor da matriz corresponde a 1 se 
essas pessoas são amigas e 0 se não forem. Imprima uma lista 
contendo a quantidade de amigos de cada uma das pessoas.
Exemplo (Desconsiderar os cabeçalhos/títulos):
Pessoa1 Pessoa2 Pessoa3 Pessoa4 Pessoa5
Pessoa1 0 1 0 0 0
Pessoa2 1 0 1 1 0
Pessoa3 0 1 0 0 1
Pessoa4 0 1 0 0 0
Pessoa5 0 0 1 0 0
*por enquanto a tabela pode estar fixa dentro do programa
Listas - ArrayList
• Cria uma lista de itens de qualquer tipo
• Pode conter tipos diferentes de dados em uma mesma 
lista
ArrayList coisas = new ArrayList();
coisas.Add(10);
coisas.Add("Teste");
coisas.Add(19.90);
coisas.Add(true);
Listas - List
• Funciona de forma semelhante ao ArrayList porém, exige 
que todos os elementos da lista sejam de um mesmo tipo.
List<String> nomes = new List<String>();
nomes.Add("Zezinho");
nomes.Add("Huguinho");
nomes.Add("Luizinho");
foreach (String nome in nomes)
{
 Console.WriteLine(nome);
}
Console.ReadLine();
Exemplos
 List<String> nomes = new List<String>();
 nomes.Add("Zezinho");
 nomes.Add("Huguinho");
 nomes.Add("Luizinho");
 foreach (String nome in nomes)
 {
 Console.WriteLine(nome);
 }
 Console.WriteLine("A lista tem {0} itens", nomes.Count);
 Console.WriteLine("Nome na primeira posição: {0}", nomes.ElementAt(0));
 
 Console.WriteLine("Removendo nome na posição 2");
 nomes.RemoveAt(2);
 Console.WriteLine("A lista tem {0} itens", nomes.Count);
 Console.WriteLine("Huguinho está na lista?");
 if (nomes.Contains("Huguinho"))
 {
 Console.WriteLine("Sim");
 }
 else
 {
 Console.WriteLine("Não");
 }
 String nomePesquisado = nomes.Where(n => n.Contains("zinh")).FirstOrDefault();
 Console.WriteLine("Resultado da pesquisa: {0}", nomePesquisado);
 if (nomes.Where(nome => nome.Contains("zinh")).Any())
 {
 Console.WriteLine("Sim, tem um elemento que começa com Z");
 }
Listas - List
• Listas possuem alguns métodos adicionais como:
 List<String> nomes = new List<String>();
 nomes.Add("Zezinho");
 nomes.Add("Huguinho");
 nomes.Add("Luizinho");
 foreach (String nome in nomes)
 {
 Console.WriteLine(nome);
 }
 
 //Remove um elemento da lista
 nomes.Remove("Huguinho");
 //Pega o tamanho da lista
 int numElementos = nomes.Count;
 //Limpa a lista
 nomes.Clear();
 //Verifica se o elemento existe na lista
 nomes.Contains("Luizinho");
 
 Console.ReadLine();
3) Refazer o exercício de receitas e despesas. O programa agora deve 
fornecer as seguintes opções:
a) Cadastrar uma nova receita
b) Cadastrar uma nova despesa
c) Mostrar o saldo
d) Mostrar a maior e a menor receita e despesa
Listas - SortedList
• Guarda uma coleção de itens de forma ordenada
• Utiliza uma chave e um valor. Os elementos da chave 
devem ser de um mesmo tipo
using System.Collections;
...
SortedList Paises = new SortedList();
Paises.Add("Brasil", 0);
Paises.Add("Espanha", 1);
Paises.Add("Alemanha", 2);
Paises.Add("Mexico", 3);
Paises.Add("Italia", 4);
foreach (DictionaryEntry locais in Paises)
{
 Console.WriteLine(locais.Key.ToString() + "=" + locais.Value.ToString());
}
Console.ReadLine(); 
Dicionários - Dictionary
Muitas vezes queremos buscar um objeto a partir de 
alguma informação sobre ele. 
Ex:
Buscar um carro a partir do numero da placa
Buscar um usuário a partir do email
Buscar uma pessoa a partir do cpf
Buscar um livro a partir do ISBN
Mapas - Dictionary
Dictionary<int, String> usuarios = new Dictionary<int, String>();
usuarios.Add(012388877, "Zezinho");
usuarios.Add(827382, "Huguinho");
usuarios.Add(1444, "Luizinho");
//Recupera o nome do usuário a partir do código
Console.WriteLine("O usuário com CPF 1444 é o " + usuarios[1444]);
foreach (int cpf in usuarios.Keys)
{
 Console.WriteLine("Cpf: " + cpf);
 Console.WriteLine("Nome: " + usuarios[cpf]);
}
Console.ReadLine();
Exercício
• 1) Crie um programa que guarde e imprima o nome de todas as disciplinas que você 
está matriculado este semestre
• O programa deve permitir o cadastro de um número indeterminado de disciplinas
• 2) Crie um programa que guarde o código e o nome das disciplinas e imprima em 
ordem alfabética (pelo nome) todas as disciplinas em que você está matriculado neste 
semestre.
• O programa deve permitir o cadastro de um número indeterminado de disciplinas
3) Crie um programa para gerenciar os ganhos e gastos. Cada registro deve conter 
uma descrição da operação (Ex: salário, almoço e etc) e o valor. O programa deve 
permitir a impressão de um relatório com o saldo restante, a lista de ganhos e a lista 
de gastos.
- O usuário deve ser capaz de cadastrar um número indeterminado de ganhos e 
gastos
- O sistema deve oferecer um menupara:
- Cadastrar ganhos
- Cadastrar gastos
- Imprimir relatório
- Sair
Funções
• Funções são pequenos blocos de código que podem
• Receber parâmetros
• Retornar valores
Funções
 static String CriaMensagemBoasVindas(String nome)
 {
 String msg = "";
 msg += "+-----------------------------------------+\n";
 msg += "| |\n";
 msg += "| Bem Vindo!!!!! |\n";
 msg += "|" + new String(' ', 20 - (nome.Length/2)) + "\n";
 msg += nome + "\n";
 msg += new String(' ',20-(nome.Length/2)) + "|\n";
 msg += "| |\n";
 msg += "| |\n";
 msg += "+-----------------------------------------+\n";
 }
 static void Main(string[] args)
 {
 Console.WriteLine("Digite seu nome: ");
 String nome = Console.ReadLine();
 String mensagem = CriaMensagemBoasVindas(nome);
 Console.WriteLine(mensagem);
 Console.ReadLine();
 }
Datas
A classe responsável por manipular datas é chamada 
DateTime e corresponde a uma única data. A classe 
GregorianCalendar corresponde a um conjunto de 
dadas em um formato de calendário.
DateTime hoje = DateTime.Now; //Pega a data atual
Console.WriteLine("Hoje é {0} de {1} de {2}", hoje.Day, 
hoje.Month, hoje.Year);
GregorianCalendar cal = new GregorianCalendar();
int dias = cal.GetDaysInMonth(1957, 2);
Console.WriteLine("Fevereiro de 1957 teve {0} dias", dias);
Console.ReadLine();
Calculando a diferença entre datas
• Usando a classe DateTime podemos fazer cálculas entre 
duas datas:
DateTime hoje = DateTime.Now;
DateTime natal = new DateTime(2017, 12, 25);
TimeSpan tempoNatal = natal - hoje;
Console.WriteLine("Faltam {0} dias, {1} horas e {2} minutos para o 
natal", tempoNatal.TotalDays, tempoNatal.Hours, tempoNatal.Minutes);
Console.ReadLine();
Convertendo uma String em DateTime
String evento = "21/07/1997";
DateTime data = DateTime.ParseExact(evento, "dd/MM/yyyy", 
System.Globalization.CultureInfo.InvariantCulture);
//Convertendo de DateTime para String
Console.WriteLine(data.ToString("dd/MM/yyyy"));
Validando uma conversão de DateTime
String evento = Console.ReadLine();
DateTime dataConvertida;
bool conseguiu = DateTime.TryParseExact(evento, 
 "dd/MM/yyyy", 
 
System.Globalization.CultureInfo.InvariantCulture,
 System.Globalization.DateTimeStyles.None,
 out dataConvertida);
if(conseguiu)
{
 Console.WriteLine("Data: {0}", dataConvertida.ToString("dd/MM/yyyy"));
}
else
{
 Console.WriteLine("Formato de data inválida");
}
Exercícios
• Escreva um programa que solicite a data de nascimento 
de uma pessoa e mostre a quantidade de dias passados 
desde essa data.
• Escreva um programa que mostre quantos dias, horas e 
minutos faltam para o natal.
Console - Avançado
• É possível melhorar as telas do console utilizando caracteres 
especiais para definir bordas e cores.
• Console.SetCursorPosition(x, y);
• Posiciona o cursor em um local da tela. Tudo que for digitado após esse 
comando será escrito nesta coordenada.
• Console.ForegroundColor = ConsoleColor.Yellow;
• Muda a cor da letra. Neste exemplo a letra será amarela
• Console.BackgroundColor = ConsoleColor.Red;
• Muda a cor do fundo. Neste exemplo a cor será vermelha.
• Console.WindowWidth
• Pega a largura da janela
• Console.WindowHeight
• Pega a altura da janela
• Console.CursorVisible 
• Oculta ou mostra o cursor piscando _
Console - Avançado
9472: ─ 9474: │ 9484: ┌ 9488: ┐ 
9492: └ 9496: ┘ 9500: ├ 9508: ┤ 
9516: ┬ 9524: ┴ 9532: ┼ 9552: ═ 
9553: ║ 9554: ╔ 9555: ╔ 9556: ╔ 
9557: ╗ 9558: ╗ 9559: ╗ 9560: ╚ 
9561: ╚ 9562: ╚ 9563: ╝ 9564: ╝ 
9565: ╝ 9566: ╠ 9567: ╠ 9568: ╠ 
9569: ╣ 9570: ╣ 9571: ╣ 9572: ╦ 
9573: ╦ 9574: ╦ 9575: ╩ 9576: ╩ 
9577: ╩ 9578: ╬ 9579: ╬ 9580: ╬
9612: █ 9619: ▓ 9604: ▄ 9632: ■
 static void DesenhaTela()
 {
 Console.SetCursorPosition(0, 0);
 Console.Write((char)9554);
 Console.Write(new String((char)9552, Console.WindowWidth-2));
 Console.SetCursorPosition(Console.WindowWidth-1, 0);
 Console.Write((char)9557);
 for (int i = 1; i < Console.WindowHeight - 2; i++)
 {
 Console.SetCursorPosition(0, i);
 Console.WriteLine((char)9553);
 Console.SetCursorPosition(Console.WindowWidth - 1, i);
 Console.WriteLine((char)9553);
 }
 Console.SetCursorPosition(0, Console.WindowHeight - 2);
 Console.Write((char)9561);
 Console.Write(new String((char)9552, Console.WindowWidth - 2));
 Console.SetCursorPosition(Console.WindowWidth - 1, Console.WindowHeight-2);
 Console.Write((char)9564);
 Console.SetCursorPosition(1, 1);
 }
static void Main(string[] args)
{
 DesenhaTela();
}
...
Exercícios
• Escreva um programa que mostre um retângulo utilizando os 
símbolos abaixo. O programa deve solicitar os valores das 
medidas dos lados para o usuário.
9472: ─ 9474: │ 
9492: └ 9496: ┘
9484: ┌ 9488: ┐ 
• Escreva um programa que exiba um menu contendo as 
opções (1 – Brasil, 2 – Alemanha, 3 – Inglaterra) e mostre no 
console a bandeira correspondente. Utilize matrizes para a 
definição das cores das bandeiras. 
• Escreva um programa que mostre um círculo (aproximado). O 
programa deve solicitar para o usuário o raio e a cor da linha.
 ...
 static void PreencheTela()
 {
 for (int x = 0; x < Console.WindowWidth - 1; x++)
 {
 for (int y = 0; y < Console.WindowHeight - 1; y++)
 {
 //Gera um número aleatório entre 0 e o número de cores disponíveis
 int randomIndex = new Random(x).Next(0, Enum.GetValues(typeof(ConsoleColor)).Length);
 //Seleciona a cor com base no índice aleatório gerado
 ConsoleColor color = (ConsoleColor) Enum.GetValues(typeof(ConsoleColor)).GetValue(randomIndex);
 //Posiciona o cursor na posição x e y
 Console.SetCursorPosition(x, y);
 //Seta a cor da letra como sendo a cor selecionada aleatoriamente
 Console.ForegroundColor = color;
 //Escreve um caractere na posição x e y
 Console.Write("#");
 }
 }
 }
static void Main(string[] args)
{
 PreencheTela();
}
...
ESTRUTURAS
Estruturas
Permite criar tipos de dados personalizados. São 
especificadas utilizando o comando struct.
 public struct Usuario
 {
 public String Nome;
 public String Email;
 public Int32 Matricula;
 }
Estes dados podem ser compostos de outros 
dados com tipos conhecidos como String, Int32, 
Decimal e/ou outras estruturas.
 
Estruturas
Após definir a estrutura é possível criar variáveis 
com o tipo definido pela estrutura.
 Usuario u1 = new Usuario();u1.Nome = “Zezinho";
u1.Email = “zeh@patinhasinc.com";
u1.Matricula = 123;
Estruturas
Essas estruturas podem ser usadas em conjunto 
com List
 
Usuario u1 = new Usuario();
u1.Nome = "Guilherme";
u1.Email = "guilherme.defreitas@gmail.com";
u1.Matricula = 12345;
List<Usuario> usuarios = new List<Usuario>();
usuarios.Add(u1);
foreach (Usuario usuario in usuarios)
{
Console.WriteLine("Matricula: {0}",usuario.Matricula);
Console.WriteLine("Nome: {0}", usuario.Nome);
}
public struct Aluno
{
 public int Matricula;
 public String Nome;
}
class Program
{
 static void Main(string[] args)
 {
 Aluno aluno = new Aluno();
 aluno.Matricula = 1;
 aluno.Nome = "Joaozinho";
 AlteraAluno(aluno);
 Console.WriteLine("Matricula: {0}", aluno.Matricula);
 Console.WriteLine("Nome: {0}", aluno.Nome);
 Console.ReadLine();
 }
 public static void AlteraAluno(Aluno aluno)
 {
 aluno.Nome = "Zezinho";
 }
}
Estruturas vs Classes
-No C# estruturas podem ter métodos (diferente 
do C/C++)
-Estruturas são passadas por valor (copiadas) 
para funções/métodos enquanto classes são 
passadas por referência (o endereço de 
memória da variável é passado).
- Exemplo
 
Exercício
Em uma agenda telefônica os contatos são cadastrados com os seguintes dados: 
Nome
Telefone
Celular
Email
DataAniversario
Essas informações devem ser representadas em um tipo estruturado de dados 
Contato. 
Escreva um programa que permita o cadastro, remoção, busca e impressão de 
contatos desta agenda telefônica conforme as opções abaixo. 
1 – Inserir Contato 
2 – Listar Contatos 
3 – Buscar Contato por nome
5 – Remover Contato 
6 - Listar aniversariantes do mês
0 – Sair
Memória
Código
Estática
Dinâmica
Código fonte do 
programa em 
código de 
máquina
Área de 
dados
• Variáveis 
Globais
• Variáveis “static”
• Constantes
• Pilha 
• Hea
p
Memória
Pilha
(stack)
Heap
Memória dinâmica
• Estrutura de pilha (LIFO)
• Variáveis locais
• Parâmetros de funções
• Endereço de retorno 
• Malloc
• Calloc
• New
• *qualquer alocação 
dinâmica
Recursividade
• Ocorre quando um método chama ele mesmo. 
• Promove a solução de problemas com um código mais elegante. 
• Normalmente utiliza mais memória de pilha
• Pode ser utilizado como mecanismo de repetição em linguagens 
puramente funcionais (onde não existe for, foreach, while e do).
• Necessita de uma “condição de parada” para que a 
recursão não continue indefinidamente. 
Fatorial – Versão recursiva
1. public static void Executar(){
2. int valor = 5;
3. int resultado = Fatorial(valor);
 4. Console.WriteLine(“O fatorial de {0} é: {1}", valor, resultado);
 5. } 
 6.
 7. public static int Fatorial(int num)
 8. {
 9. if (num <= 1)
 10. {
 11. return num;
 12. }
 13. else
 14. {
 15. int res = Fatorial(num - 1);
 16. return num * res;
 17. }
 18. }
Recursividade - Exercício
• A sequência de Fibonacci tem como primeiros termos os números 0 e 1 e, a seguir, cada 
termo subsequente é obtido pela soma dos dois termos predecessores. 
0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ...
Crie um programa que:
1) Solicite que o usuário informe um valor inteiro correspondente a posição até onde a 
sequência de Fibinacci deve ser impressa.
2) Calcule e imprima todos os números da sequência de Fibonacci até o a posição do 
solicitada.
Ex: 
Informe a posição a ser mostrada:
7
0, 1, 1, 2, 3, 5, 8
a) Implemente a solução iterativa (tradicional)
b) Implemente o programa usando a solução recursiva
Fibonacci - Recursivo
static void FibonacciRecursivo(Int64 a, Int64 b, Int64 cont, Int64 posicao)
{
 if (cont < posicao)
 {
 Console.Write("{0} ", a);
 FibonacciRecursivo(b, a + b, cont + 1, posicao);
 }
}
...
Console.WriteLine("Informe a posição de Fibonacci a ser 
calculada:");
Int64 posicao = Convert.ToInt64(Console.ReadLine());
FibonacciRecursivo(0, 1, 0, posicao);
 
Fibonacci - Iterativo
static void FibonacciIterativo(Int64 posicao)
{
 Int64 a = 0, b = 1, c = 0;
 Console.Write("{0} {1}", a, b);
 for (Int64 i = 2; i < posicao; i++)
 {
 c = a + b;
 Console.Write(" {0}", c);
 a = b;
 b = c;
 }
}
...
Console.WriteLine("Informe a posição de Fibonacci a ser 
calculada:");
Int64 posicao = Convert.ToInt64(Console.ReadLine());
FibonacciIterativo(posicao);
 
Trabalho 1
• Em trios.
• Apresentação: 10/11
• Pesquisar e implementar em C# um algoritmo recursivo
• Implementar a versão recursiva
• Implementar a versão iterativa
• Apresentação
• Qual problema o algoritmo resolve?
• Executar manualmente (teste de mesa) o algoritmo em uma instância pequena do problema
• Código Recursivo
• Código Iterativo
Obs: O algoritmos NÃO podem ser
- Sequência de Fibonacci
- Fatorial
O mesmo problema não pode ser escolhido por diferentes duplas. Para isso, cadastre o problema que 
irá resolver no formulário abaixo:
Cadastre aqui - http://goo.gl/forms/8cFNirpTW7
Planilha com as escolhas das duplas (consulte antes de cadastrar o seu tema)
https://docs.google.com/spreadsheets/d/1mLx6JezNxtctn0aSKxe9qL9WIihJILkeRbD28v2tJx0/edit#gid=1196
360872 
GRAVANDO E LENDO 
ARQUIVOS TEXTO
Gravando arquivos texto
Para gravar e ler arquivos utilizaremos a classe 
StreamWriter (em System.IO) Com ela podemos gravar um 
arquivo com dados no formato de texto.
*ver exemplo disponibilizado no site
Gravando um arquivo
using System;
using System.IO;
namespace DemoConsole
{
 class Program
 {
 static void Main(string[] args)
 {
 //Cria um arquivo e grava um texto
 StreamWriter arquivo = new StreamWriter("arquivo.txt");
 arquivo.WriteLine("Olá");
 arquivo.Close();
 }
 }
}
Lendo um arquivo texto
Para ler um arquivo utilizamos a classe StreamReader.
*ver o exemplo de código colocado no site
Lendo um arquivo texto
using System;
using System.IO;
namespace DemoConsole
{
 class Program
 {
 static void Main(string[] args)
 {
 //Abre e lê o conteúdo do arquivo
 StreamReader reader = new StreamReader("arquivo.txt");
 String dados = reader.ReadToEnd();
 Console.Write(dados);
 Console.ReadLine();
 }
 }
}
Serialização automática - 
Gravando
• Grava os dados no formato XML de forma automática
• Funciona apenas com classes
• As classes precisam ser marcadas com o atributo [Serializable]
Usuario u1 = new Usuario();
u1.Nome = "Guilherme";
u1.Email = "guilherme.defreitas@gmail.com";
u1.Matricula = 12345;
//Cria o arquivo usuarios.xml com os dados
StreamWriter writer = new StreamWriter("usuario.xml");
XmlSerializer xmlserializer = new XmlSerializer(typeof(Usuario));
xmlserializer.Serialize(writer, u1);
writer.Close();
Serialização automática - Lendo
• Recupera os dados do arquivo e cria um novo objeto
FileStream stream = System.IO.File.OpenRead("usuario.xml");
XmlSerializer serializer = new XmlSerializer(typeof(Usuario));
Usuario u2 = serializer.Deserialize(stream) as Usuario;
stream.Close();
Console.WriteLine("Nome: {0}", u2.Nome);
Serialização binária
• Converte os dados para um formato binário para 
transferência via rede ou gravação em arquivo
public static byte[] Serialize<T>(T objectSerialize)
{
MemoryStream memorystream = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(memorystream, objectSerialize);
memorystream.Flush();
byte[] bytesData = memorystream.ToArray();
return bytesData;
}
public static object Deserialize(byte[] data)
{
BinaryFormatter bf = new BinaryFormatter();
MemoryStream memorystream = new MemoryStream(data);
object objDeserialized = bf.Deserialize(memorystream);
return objDeserialized;
}
Exercício
Um empresa de entrega de pizzas deseja criar um sistema para automatizar suas 
entregas. Para isso o sistema deve possuir:
1 - Cadastrar uma entrega
- CPF do solicitante
- Nomedo solicitante
- Telefone do solicitante
- Rua
- Numero 
- Bairro
- Cidade
2 - Listar entregas NÃO finalizadas
3 - Buscar entregas por CPF do solicitante
4 - Marcar uma entrega como finalizada (entregue)
5 - Mostar todas as entregas finalizadas
*O sistema deve gravar todas as informações em arquivo XML

Outros materiais