Escolar Documentos
Profissional Documentos
Cultura Documentos
.NET com C#
Antnio Jnior
Bruno Inojosa
Programao Orientada a
Objetos com C#
Captulo 1:
Programao
Orientada a Objetos
Classes e Objetos
Modificadores de Acesso
Declarao
Definio
public
Acesso ilimitado
private
internal
protected
protected internal
Mtodos
Mtodos
Mtodos
Passando parmetros por referncia (usando ref)
Mtodos
Mtodos - Sobrecarga
Construtores
Construtores
Sobrecarga de Construtores
public class Cliente
{
public string nomeCliente;
public int clienteId;
public Cliente(): this (desconhecido, 0)
{
}
public Cliente(string nome, int identificacao)
{
this.nomeCliente = nome;
this.clienteId = identificacao;
}
}
Herana
Tipos de Herana
Simples
Quando uma classe herda as propriedades de uma
nica classe pai.
Mltipla
Ocorre quando uma classe tem mais de um pai.
Herana
Herana
Herana
Polimorfismo
Polimorfismo
Objetos
Mtodo Invocado
Comportamento
Diretor
Viajar()
Parcerias
Vendedor
Viajar()
Vendas
Funcionario
Viajar()
Frias
Polimorfismo
Encapsulamento
Propriedades
Classes Abstratas
Classes Abstratas
Classes Abstratas
Classes Abstratas
Interfaces
Interfaces
Interfaces
Interfaces
Uma interface define a mesma
funcionalidade e comportamento classes
no relacionadas diretamente
Declarando a interface
Interfaces
Implementando a interface
public class Computador : IProduto
{
private bool ePerecivel;
public bool EPerecivel
{
get { return ePerecivel; }
}
public Fornecedor RecuperarFornecedor()
{
return new Fornecedor();
}
public void RegistrarVenda(Cliente cliente)
{
// Rotina para registrar vendas
}
}
Interfaces
IS e AS
if (computador is IProduto)
{
// aes
}
IProduto produto = computador as IProduto;
if (produto != null)
{
Fornecedor fornecedor = produto.RecuperarFornecedor();
}
Interfaces
Pode tornar o comportamento de seus
objetos semelhante ao comportamento dos
objetos da .NET Framework
Exemplos:
ICollection
IComparer
IDictionary
public class Cliente : Pessoa, IComparable
{
...
}
Captulo 2:
Introduo
Linguagem C#
Namespaces
Declarando um namespace
namespace NomeEmpresa {
public class Cliente {}
}
Namespaces em cadeia
namespace NomeEmpresa {
namespace Vendas {
public class Cliente {}
}
}
//OR
namespace NomeEmpresa.Vendas {
public class Cliente {}
}
Instruo Using
using
using
using
using
System;
System.Data;
NomeEmpresa.Vendas;
Pessoa = ClassLibrary.Person;
Comentrios
// Faz comentrio de uma linha apenas
/*
Faz comentrio de mltiplas linhas ou blocos de cdigo
*/
#region Area
public int Calcula(int x, int y){
}
#endregion
Documentao XML
Documentao XML
/// <summary>
/// Define a quantidade de produtos adquiridos
/// </summary>
/// <param name=novoNumero>Nmero de produtos adquiridos</param>
/// <param name=clienteModificado>Indica se o cliente pode ser modificado
/// depois de criado</param>
public void DefineProdutosAdquiridos(int novoNumero, bool clienteModificado)
{
if (clienteModificado)
this.produtosAdquiridos = novoNumero;
}
Tipos de Dados
byte
byte
Inteiro
Inteiro de
de 8
8 bits
bits sem
sem sinal
sinal
sbyte
sbyte
Inteiro
Inteiro com
com sinal
sinal de
de 8
8 bits
bits
int
int
Inteiro
Inteiro de
de 32
32 bits
bits com
com sinal
sinal
uint
uint
Inteiro
Inteiro de
de 32
32 bits
bits sem
sem sinal
sinal
long
long
Inteiro
Inteiro com
com sinal
sinal de
de 64
64 bits
bits
ulong
ulong
Inteiro
Inteiro sem
sem sinal
sinal de
de 64
64 bits
bits
short
short
Inteiro
Inteiro com
com sinal
sinal de
de 16
16 bits
bits
ushort
ushort
Inteiro
Inteiro sem
sem sinal
sinal de
de 16
16 bits
bits
decimal
decimal
Ponto
Ponto flutuante
flutuante decimal
decimal Este
Este tipo
tipo tem
tem uma
uma preciso
preciso de
de 28
28 casas
casas decimais.
decimais.
double
double
Ponto
Ponto flutuante
flutuante binrio.Este
binrio.Este tipo
tipo tem
tem uma
uma preciso
preciso de
de 15
15 casas
casas decimais.
decimais.
float
float
Ponto
Ponto flutuante
flutuante binrio.
binrio. Este
Este tipo
tipo tem
tem uma
uma preciso
preciso de
de 7
7 casas
casas decimais.
decimais.
bool
bool
Tipo
Tipo de
de dados
dados booleano,
booleano, pode
pode ser
ser apenas
apenas true
true ou
ou false.
false.
char
char
Um
Um nico
nico caractere
caractere unicode
unicode de
de 16
16 bits.
bits.
string
string
Unicode
Unicode com
com at
at 1
1 gigabyte
gigabyte de
de caracteres.
caracteres.
int i;
i = 42;
42
Boxing e Unboxing
int i = 123;
object O;
O = i;
string S;
S = O.ToString()
int x;
x = (int) O;
Stack
x
O
i
Heap
123
123
123
Operadores
Aritmticos
Aritmticos
Atribuio
Atribuio
Concatenao
Concatenao
Criao
Criao de
de
Objetos
Objetos
Igualdade
Igualdade
Diferena
Diferena
+,
+, -,
-, *,
*, /,
/, %
%
=,
=, +=,
+=, -=,
-=,
*=,
*=, /=,
/=,
<<=,
<<=, >>=,
>>=,
&=,
^=,
&=, ^=, |=
|=
+
+
New
New
==,
==, !=
!=
Operadores
Incremento
Incremento
Decremento
Decremento
Lgicos
Lgicos
Primrios
Primrios
Relacionais
Relacionais
++,
++, ---
&,
&, ^,
^, |,
|, &&,
&&, ||,
||,
~,
!
~, !
typeof,
typeof, sizeof,
sizeof,
checked,
checked,
unchecked
unchecked
<,
<, >,
>, <=,
<=, >=,
>=,
is
is
Estruturas de Controle de
Fluxo
if (condio1) {
instrues1;
}
else if (condio2) {
instrues2;
}
else {
instrues3;
}
Estruturas de Controle de
Fluxo
switch case
Estruturas de deciso caracterizadas pela possibilidade de
uma varivel possuir vrios valores.
A clusula switch ocorre uma vez
A clusula case pode ocorrer de uma a vrias vezes, e
default opcional.
switch (varivel)
{
case 1 valor que a varivel pode
case 2 valor que a varivel pode
case 3 valor que a varivel pode
default: instrues para condies
}
Estruturas de Repetio
for
Estrutura de repetio caracterizada pela existncia de
trs parmetros:
Valor inicial,
Condio para parada das iteraes,
Quantidade de incrementos/decrementos a cada iterao.
for (int i=0; i>valor; i++)
{
instrues;
}
Estruturas de Repetio
while
Estrutura de repetio que realiza as operaes
desejadas enquanto a condio especificada for
verdadeira.
while (condio) {
instrues;
}
Estruturas de Repetio
foreach
Esta estrutura de repetio uma variao do for.
Sua diferena est no fato de ser necessrio apenas
especificar uma varivel e a coleo (array) cujos
registros sero percorridos.
foreach (int i in vetor)
{
instrues;
}
Estruturas de Repetio
do ... while
Tratamento de Excees
try
try {{
//
// cdigo
cdigo factvel
factvel de
de erro
erro
}}
catch
catch (NullReferenceException
(NullReferenceException ex)
ex) {{
//
// trata
trata excees
excees de
de referncia
referncia nula
nula
}}
catch
catch {{
//
// trata
trata outras
outras excees
excees
}}
finally
finally {{
//
// executa
executa sempre
sempre
}}
Captulo 3:
Linguagem C#
Arrays (vetores)
Arrays (vetores)
Devem
ser =
instanciados
int[] codigos
new int[5];
string[] nomes = new string[100];
Podemos
criar um
Array
de Objetos
object[] produtos
= new
object[50];
Arrays (vetores)
Inicializando um array
int[] pedidos = {1, 4, 6, 8, 10, 68, 90, 98, 182, 500};
Arrays (vetores)
Arrays (vetores)
ArrayLists
ArrayLists
Indexadores
Indexadores
Consumindo indexadores
CarroCompras carro = new CarroCompras();
carro[0]
carro[1]
carro[2]
carro[3]
=
=
=
=
new
new
new
new
Produto(Televisor);
Produto(Geladeira);
Produto(Computador);
Produto(Microondas);
Eventos e Delegates
Conceitos:
Evento: ao que pode ser gerenciada/manipulada
atravs de cdigo
Delegate: membro da classe responsvel por
delegar as aes correspondentes a ocorrncia de
um evento ao(s) manipulador(es) de eventos
correspondentes
Manipulador de Evento: mtodo responsvel pela
execuo de aes em reao a ocorrncia de um
evento
Eventos e Delegates
Eventos e Delegates
Passo 3: disparar o evento na chamada de algum
mtodo da classe
public class Cliente
{
...
public void MetodoEvento(int produtosAdquiridos) {
this.EventoProdutos(produtosAdquiridos); }
}
Eventos e Delegates
Passo 5: implementar o manipulador de evento
(deve respeitar a mesma assinatura definida pelo
delegate do evento)
public void ManipuladorEvento(int produtos)
{
label1.Text = produtos.ToString();
}
Enumeradores
Mostrando Variveis
Console.WriteLine({0}, tpDiretor); //Mostra Comercial
Estruturas
No h suporte a herana
Estruturas
Definindo estruturas
public struct ProdutoS
{
public int identificacao;
public string nome;
public ProdutoS (int identificacao, string nome)
{
this.identificacao = identificacao;
this.nome = nome;
}
}
Estruturas
Consumindo estruturas
ProdutoS produtoSimples;
produtoSimples.identificacao = 1131;
ProdutoSimples.nome = Televisor;
Sobrecarga de operadores
Converso de operadores
Converso implcita
Sempre possvel, sem perda de preciso
Ex.: long = int
Converso explcita
necessria uma verificao em tempo de
execuo (cast)
Ex.: int = (int) long;
Converso de operadores
public static implicit operator Conta (int x) { return new Conta(x); }
public static explicit operator int (Conta c) { return c.saldo; }
Captulo 4:
Recursos da .NET
Framework 2.0
Generics
Generics - List
Generics
Vantagens:
Soluo de uma limitao existente nas verses anteriores,
onde a generalizao era feita atravs de Casts (boxing e
unboxing).
Permitem um ganho de performance ao armazenar ou
recuperar dados, pois no necessria converso de tipos.
Prov uma maneira mais elegante de implementao,
verificando os erros em tempo de compilao.
Traz classes genricas muito teis (List, Queue, Stack,
LinkedList).
Generics - Stack
Generics - Queue
Generics - LinkedList
Generics
public class Funcionario<T> {
private int idFunc;
static List<T> listaFuncionarios = new List<T>();
public void Adicionar(T func) { ... }
public void Remover(T func) { ... }
}
Generics Restries
(Constraints)
Tipos de Restries
Constraint
Descrio
where<T>: estrutura
where<T>: classe
where<T>: new()
where<T>: <nome da
classe base>
where<T>: <nome da
interface>
Generics Restries
(Constraints)
Generics Restries
(Constraints)
Adicionando a restrio
interface IProduto { void Mostrar(); }
public class Produto<T> where T: IProduto
{
public void P(T aux) {
aux.Mostrar();
}
}
Generics Restries
(Constraints)
Generics
Generics
Generics
Generics
Partial Types
Partial Types
Partial Types
ClienteP1.cs
Declarando uma classe parcial
public partial class Cliente
{
public int codigo;
public bool EClienteEspecial() { }
}
ClienteP2.cs
public partial class Cliente
{
int produtosAdquiridos;
public int ProdutosAdquiridos { get { } set { } }
}
Nullable Types
Nullable Types
Nullable Types
Qualquer tipo por valor pode ser usado como Nullable Type
int? i = 10;
double? x = 3.14;
bool? flag = null;
char? letra = 'a';
int?[] MeuArray = new int?[10];
Nullable Types
Nullable Types
Converses explcitas
// Exemplos
int? clienteId = null;
// No compila
int y = clienteId;
// Compila, mas ser gerada uma exception se x for null
int y = (int)clienteId;
// Compila, mas ser gerada uma exception se x for null
int y = clienteId.Value;
Converses implcitas
A converso de um tipo anulvel para um tipo regular
implcita.
int? produtosAdquiridos = null;
// Converso implcita
int produtosAdquiridos = 10;
Nullable Types
Operadores
Quaisquer operadores existentes para tipos por valor podem ser
utilizados com Nullable Types.
O operador produzir null se os operandos forem nulos, caso
contrrio, usar o valor contido para calcular o resultado.
int? x = 10;
x++;
// x agora 11
x = x * 10; // x agora 110
int? y = null;
x = x + y; // x agora null