Você está na página 1de 107

Introduo # Linguagem C

Prof.Dr. Antonio Geraldo da Rocha Vidal EAD-5881 - Tecnologia de Informtica

FEA/USP

Hello World
using System;

class Hello { static void Main( ) { Console.WriteLine(Ol Mundo!"); Console.ReadLine(); // Enter para finalizar } }

Metas de projeto do C#
Orientao para componentes Tudo objeto Construo de software robusto e durvel Integrao ao software j existente, preservando investimentos.

Metas de projeto do C#
Orientao para Componentes
C# pode ser considerada uma linguagem orientada para objetos e componentes da famlia do C/C++ O que um componente?

Um mdulo independente quanto a desenvolvimento e reutilizao Menos granulares que objetos


Os objetos so construes ao nvel da linguagem Os componentes so construes ao nvel da aplicao

Inclui mltiplas classes Freqentemente independentes da linguagem Em geral, o desenvolvedor e o usurio de componentes no se conhecem, no trabalham para a mesma empresa e no utilizam a mesma linguagem de programao

Metas de projeto do C#
Orientao para Componentes
Conceitos de componentes:

Propriedades, mtodos, eventos Atributos de projeto (design-time) e de execuo (run-time) Documentao integrada usando XML Sem arquivos de cabealho, IDL, etc. Podem ser embutidos nas pginas ASP

Permitem one-stop programming

Metas de projeto do C#
Tudo Objeto
Vises tradicionais:

C++, Java: os tipos primitivos so mgicos e no interoperam com objetos Smalltalk, Lisp: os tipos primitivos so objetos, mas com um grande custo de desempenho Grande simplicidade ao longo de todo sistema Novos tipos primitivos: Decimal, SQL Colees, etc., trabalham com todos os tipos

C# unifica estas vises com bom desempenho

Extensibilidade e reusabilidade aprimorados:


Metas de projeto do C#
Software Robusto e Durvel
Coletor de lixo

Nenhum vazamento de memria e ponteiros perdidos

A manipulao de excees padronizada Estrutura tipada e segura

Nenhuma varivel sem inicializao, nenhum contedo inseguro

Versionamento Evita erros comuns

Por exemplo: if (x = y) ... Menos partes mveis

Programao sem escalas (one-stop programming)

Metas de projeto do C#
Preservar Investimentos
Heranas do C++:

Namespaces, pointers (em cdigo inseguro), unsigned types, etc. Algumas mudanas, mas nenhum sacrifcio desnecessrio Todo software precisa estar integrado C# fala com XML, SOAP, COM, DLLs, e qualquer linguagem compatvel com o .NET Framework Curva aprendizado pequena H milhes de linhas de cdigo C# na plataforma .NET

Interoperabilidade

Produtividade aumentada

Tipos de Objetos
Viso
Um programa C# uma coleo de tipos de objetos:

Classes, structs, enums, interfaces, delegates Isto : int, byte, char, string, object

C# fornece um conjunto de tipos predefinidos

Voc pode criar seus prprios tipos Todos os dados e cdigos so definidos dentro de um tipo de objeto:

Nenhuma varivel global, nenhuma funo global

Tipos de Objetos
Viso
Os tipos de objeto podem conter:

Dados

Campos, constantes, arrays Eventos Mtodos, operadores, construtores, destruidores Propriedades, indexadores Classes, structs, enums, interfaces, delegates

Funes

Outros tipos

Tipos de Objetos
Viso
Os tipos de objetos podem ser instanciados:

e ento usados: chamar mtodos, obter e configurar propriedades, etc. Implicitamente e explicitamente

Pode-se converter de um tipo de objeto para outro:

Os tipos de objetos so organizados fisicamente em arquivos:

Namespaces, files, assemblies

Os tipos so organizados logicamente em uma hierarquia Existem duas categorias de tipos: valor e referncia

Tipos de Objetos
Sistema Unificado de Tipos
Tipos de valor

Contm dados No podem ser nulos Contm referncias a objetos Podem ser nulos
i s 123 Ol pessoal!"

Tipos de referncia

int i = 123; string s = Ol pessoa!";

Tipos de Objetos
Sistema Unificado de Tipos
Tipos de valor

Primitivos int i; float x; Enumeraes enum State { Off, On } Estruturas struct Point {int x,y;} Root String Classes Interfaces Arrays Delegates object string class Foo: Bar, IFoo {...} interface IFoo: IBar {...} string[] a = new string[10]; delegate void Empty();

Tipos de referncia

Tipos de Objetos
Sistema Unificado de Tipos
Valor (Struct)
Varivel armazena Alocou Contedo Valor padro Alias = Significa Valor real Pilha, membro Sempre tem um valor 0 No Cpia do valor

Referncia (Class)
Alocao na memria Ponteiro Pode ser nulo null Sim Cpia da referncia

Pode herdar

No

Sim

Tipos de Objetos
Sistema Unificado de Tipos
Benefcios de tipos de valor:

Nenhuma alocao volumosa Uso mais eficiente da memria Menos referncia indireta Sistema de tipo unificado

Sem a dicotomia PRIMITIVO X OBJETO

Tipos de Objetos
Converses
Converses implcitas

Ocorrem automaticamente Garantia de sucesso Nenhuma perda na preciso das informaes Exige um elenco Podem no ter sucesso Informaes (preciso) podem ser perdidas

Converses explcitas

Ambas converses implcitas e explcitas podem ser definidas pelo usurio

Tipos de Objetos
Converses

int x = 123456; long y = x; short z = (short)x;


double d = 1.2345678901234; float f = (float)d; long l = (long)d;

// implcita // explcita

// explcita // explcita

Tipos de Objetos
Sistema Unificado de Tipos
Tudo objeto:

Em ltima instncia, todos os tipos so herdados de objetos. Qualquer pedao de dados pode ser armazenado, transportado, e manipulado sem trabalho extra.
object Stream Hashtable int double

MemoryStream

FileStream

Tipos de Objetos
Sistema Unificado de Tipos
Polimorfismo

A habilidade de usar ou armazenar um objeto sem saber seu tipo preciso

void Poli(object o) { Console.WriteLine(o.ToString()); } Poli(42); Poli(abcd); Poli(12.345678901234m); Poli(new Point(23,45));

Tipos de Objetos
Sistema Unificado de Tipos
Observao: os tipos de valor e de referncia tm semntica muito diferentes Pergunta: como podemos tratar os tipos de valor e de referncia polimorficamente?

Como um int (tipo valor) pode ser convertido em um objeto (tipo referncia)? Como podemos unificar tipos de valor e de referncia?

Soluo: Boxing!

Tipos de Objetos
Sistema Unificado de Tipos
Boxing copia um tipo valor para um tipo referncia Unboxing faz a cpia inversa
int i = 123;
object o = i; int j = (int)o;

i o

123 System.Int32

123
j 123

Tipos de Objetos
Sistema Unificado de Tipos
Boxing

Copia um tipo valor para um tipo referncia (objeto) Cada tipo valor tem o correspondente (hidden) tipo referncia Note que uma cpia de valor referncia feita pelo tipo valor.

Os tipos de valor nunca so aliased

O tipo valor convertido implicitamente para objeto, um tipo referncia

Essencialmente um up cast

Tipos de Objetos
Sistema Unificado de Tipos
Unboxing

Operao inversa de boxing Copia o valor para fora do box

Cpia do tipo referncia para o tipo valor Pode no ser bem-sucedido Essencialmente um down cast

Exige uma converso de explcita


Tipos de Objetos
Sistema Unificado de Tipos
Benefcios

Habilita polimorfismo atravs de todos os tipos Classes de coleo trabalham com todos os tipos Elimina a necessidade de classes para converso Substitui o OLE Automation's Variant

Muitos exemplos na .NET Framework


Hashtable t = new Hashtable(); t.Add(0, "zero"); t.Add(1, "one"); string s = string.Format( t.Add(2, "two"); Sua nota foi {0} em um total de {1}", date);

Tipos de Objetos
Pr-definidos
Valor

Integral types Floating point types decimal bool char object string

Referncia

Tipos predefinidos
Tipos Valor
Todos so estruturas (structs) predefinidas
Com sinal Sem sinal Caractere Ponto flutuante Lgico sbyte, short, int, long byte, ushort, uint, ulong char float, double, decimal bool

Tipos predefinidos
Tipos Inteiros
Tipo C#
sbyte Short Int

Tipo System
System.Sbyte System.Int16 System.Int32

Tamanho (bytes)
1 2 4

Sinal?
Sim Sim Sim

Long
Byte Ushort Uint Ulong

System.Int64
System.Byte System.UInt16 System.UInt32 System.UInt64

8
1 2 4 8

Sim
No No No No

Tipos predefinidos
Tipos Ponto Flutuante
Segue a especificao IEEE 754 Suporta 0, Infinito, NaN

Tipo C#
float double

Tipo System
System.Single System.Double

Tamanho (bytes)
4 8

Tipos predefinidos
decimal
128 bits Essencialmente um valor 96 bit elevado uma potncia de 10 Valores decimais so representados precisamente No suporta zeros com sinais, infinito ou NaN
Tipo C#
decimal

Tipo System
System.Decimal

Tamanho (bytes)
16

Tipos predefinidos
decimal
Todos os tipos inteiro podem ser implicitamente convertidos para um tipo decimal As converses entre decimal e tipos flutuantes exigem converso explcita devido possibilidade de perda de preciso e s * m * 10

s = 1 or 1 0 m 296 -28 e 0

Tipos predefinidos
Inteiros Literais
Integer literals podem ser expressos como decimal ou hexadecimal U ou u: uint ou ulong L ou l: long ou ulong UL ou ul: ulong
123 0x7B 123U 123ul 123L // // // // // Decimal Hexadecimal Unsigned Unsigned long Long

Tipos predefinidos
Reais Literais
F ou f: float D ou d: double M ou m: decimal
123f 123D 123.456m 1.23e2f 12.3E1M // // // // // Float Double Decimal Float Decimal

Tipos predefinidos
booleano
Representa valores lgicos Os valores literais so true e false No se pode usar 1 e 0 como valores booleanos

Nenhuma converso padro entre outros tipos e booleano

Tipo C#
bool

Tipo System
System.Boolean

Tamanho (bytes)
1 (2 for arrays)

Tipos predefinidos
char
Representa um caractere Unicode Literais

A \u0041 \x0041 \n

// Caractere simples // Unicode // Hexadecimal pequeno sem sinal // Caractere ecape

Tipo C#
Char

Tipo System
System.Char

Tamanho (bytes)
2

Tipos predefinidos
char
Caracteres de seqncia de fuga (lista parcial)
Char
\
\ \\ \0 \n \r \t

Significado
Aspa simples
Aspa dupla Barra invertida Nulo Mudana de linha Retorno do carro Tabulao

Valor
0x0027
0x0022 0x005C 0x0000 0x000A 0x000D 0x0009

Tipos predefinidos
Tipos Referncia

Tipo raiz (primitivo) Cadeia de caracteres

object string

Tipos predefinidos
object
Raiz da hierarquia de objetos Armazenamento (book keeping)

0 bytes para tipos valor 8 bytes para tipos referncia

Uma referncia real (no um objeto) usa 4 bytes


Tipo C#
object

Tipo System
System.Object

Tamanho (bytes)
0/8 overhead

Tipos predefinidos
object Mtodos Pblicos
public bool Equals(object) public bool ReferenceEquals(object) protected void Finalize() public int GetHashCode() public System.Type GetType() protected object MemberwiseClone() public void Object() public string ToString()

Tipos predefinidos
string
Uma seqncia de caracteres Unicode (imutvel) Tipo referncia Sintaxe especial para literais

string s = Eu sou uma string; Tipo C#


String

Tipo System
System.String

Tamanho (bytes)
20 mnimo

Tipos predefinidos
string
Normalmente precisam ser utilizados caracteres de fuga:
string s1= \\\\server\\fileshare\\filename.cs;

Strings literais:

A maioria de seqncias fuga so ignoradas

Com exceo de

Literais podem ter mltiplas linhas

string s2 = @\\server\fileshare\filename.cs;

Tipos de Objetos
Tipos Definidos pelo Usurio
Tipos definidos pelo usurio
Enumerations
Arrays Interface Reference type Value type Function pointer

enum
int[], string[] interface class struct delegate

Tipos de Objetos
Enums
Um enum define um tipo para um grupo relacionado de constantes simblicas As escolhas devem ser conhecidas em tempo de compilao Fortemente tipado:

Nenhuma converso implcita de/para int Pode ser explicitamente convertido Operadores: +, -, ++, --, &, |, ^, ~, byte, sbyte, short, ushort, int, uint, long, ulong

Pode especificar um tipo subjacente

Tipos de Objetos
Enums
enum Color: byte { Red = 1, Green = 2, Blue = 4, Black = 0, White = Red | Green | Blue } Color c = Color.Black; Console.WriteLine(c); Console.WriteLine(c.Format());

// 0 // Black

Tipos de Objetos
Enums
Todos enums derivam de System.Enum

Fornece mtodos para:


Determinar o tipo subjacente O testar se um valor suportado Inicializar a partir de uma constante string Recuperar todos os valores em enum

Tipos de Objetos
Arrays
Os arrays (vetores) permitem que um grupo de elementos de um tipo especfico sejam armazenados em um bloco contguo de memria Os vetores so tipos de referncia Derivados de System.Array Baseados em Zero Podem ser multidimensionais

Os vetores sabem seu comprimento(s) n e grau

Permite verificao de limites de dimenses

Tipos de Objetos
Arrays
Declarao
int[] primes;

Alocao
int[] primes = new int[9];

Inicializao
int[] prime = new int[] {1,2,3,5,7,11,13,17,19}; int[] prime = {1,2,3,5,7,11,13,17,19};

Atribuio e acesso
prime2[i] = prime[i];

Enumerao
foreach (int i in prime) Console.WriteLine(i);

Tipos de Objetos
Arrays
Arrays Multidimensionais

Retangular

int[,] matR = new int[2,3]; Pode ser inicializado declarativamente int[,] matR = new int[2,3] { {1,2,3}, {4,5,6} }; Um array de arrays int[][] matJ = new int[2][]; Deve ser inicializado proceduralmente

Dentado

Tipos de Objetos
Interfaces
Uma interface define um contrato

Inclui mtodos, propriedades, indexadores, eventos Qualquer classe ou estrutura implementando uma interface deve suportar todas as clusulas do contrato Muitas classes e estruturas podem implementar uma particular interface Devem ser implementadas por uma classe ou estrutura

Interfaces fornecem polimorfismo

No contm nenhuma implementao

Tipos de Objetos
Classes
Um tipo de referncia definida pelo usurio

Similar s classes do C++ e Java

Aceitam herana simples de uma nica super classe Aceitam herana mltipla de vrias interfaces

Tipos de Objetos
Classes
Membros

Constantes, dados, mtodos, operadores, construtores e destrutores Propriedades, indexadores e eventos Membros estticos e instanciados public, protected, private, internal, protected internal

Acesso aos membros

O padro private

Instanciadas atravs do operador new

Tipos de Objetos
Estruturas (Structs)
Similar s classes, mas:

Tipo de valor definido pelo usurio Herana sempre a partir de um ValueType int, float, double, etc., so todos structs Tipos primitivos definidos pelo usurio

Ideal para objetos leves ou primitivos


Complex, point, rectangle, color, rational

Herana mltipla de interfaces Possuem os mesmos membros de uma classe Acesso aos membros

public, internal, private

Instanciadas atravs do operador new

Tipos de Objetos
Classes e Structs
struct SPoint { int x, y; ... } class CPoint { int x, y; ... } SPoint sp = new SPoint(10, 20); CPoint cp = new CPoint(10, 20); sp 10 20 cp 10 20

CPoint

Tipos de Objetos
Delegates
Um delegate um tipo de referncia que define uma assinatura a um mtodo Quando instanciada, uma delegate contm um ou mais mtodos

Essencialmente um apontador de funes orientado para objetos.

Base fundamental para tratamento de eventos

Estrutura de Programao
Introduo
Organizando Tipos Namespaces References O Mtodo Main Sintaxe

Estrutura de Programao
Organizando Tipos
Organizao fsica:

Os tipos de objetos (type) so definidos em arquivos (file). Os arquivos so compilados em mdulos (module). Os mdulos so agrupados em montagens (assembly).

Assembly Module File Type

Estrutura de Programao
Organizando Tipos
Os tipos so definidos em arquivos:

Um arquivo pode conter mltiplos tipos Cada tipo definido em um nico arquivo Um mdulo uma DLL ou um EXE Um mdulo pode conter mltiplos arquivos Um assembly pode conter mltiplos mdulos Os assemblys e os mdulos so sempre 1:1

Os arquivos so compilados em mdulos:


Os mdulos so agrupados em assemblys:


Estrutura de Programao
Organizando Tipos
Os tipos so definidos em UM lugar:

One-stop programming Nenhum arquivo de cabealho (header) ou arquivo de cdigo-fonte para sincronizar. O cdigo escrito in-line A declarao e a definio so uma mesma e nica instruo. Um tipo deve estar completamente definido em um arquivo.

No se pode por mtodos individuais em arquivos diferentes

Nenhuma declarao exige dependncia

Nenhuma referncia futura exigida

Estrutura de Programao
Namespaces
Namespaces fornecem um modo para identificar um tipo de forma exclusiva. Fornece organizao lgica de tipos:

Namespaces podem estar em vrios assemblies Namespaces podem ser aninhados

No existe nenhuma relao entre namespaces e estruturas de arquivo (diferentemente do que ocorre em Java). Um nome de tipo completamente qualificado inclui todos os namespaces.

Estrutura de Programao
Namespaces
namespace N1 { class C1 { class C2 { } } namespace N2 { class C2 { } } namespace N3.N4 { class C2 { } } } // N1 // N1.C1 // N1.C1.C2 // N1.N2 // N1.N2.C2

// N1.N3.N4 // N1.N3.N4.C2

Estrutura de Programao
Namespaces
A diretiva using permite que voc utilize tipos de objetos diferentes sem precisar digitar toda a qualificao do nome de um objeto. Porm, sempre que quiser, voc pode usar um nome completamente qualificado.
using N1; C1 a; N1.C1 b; C2 c; N1.N2.C2 d; C1.C2 e; // O N1. est implcito // Nome qualificado // Erro! C2 est indefinido // Um objeto da classe C2 // Um outro

Estrutura de Programao
Namespaces
A diretiva using tambm permite que voc crie nomes alternativos (aliases).
using MeuC1 = N1.N2.C1; using MeuN2 = N1.N2; MeuC1 a; MeuN2.C1 b; // Refere-se a N1.N2.C1 // Refere-se a N1.N2.C1

Estrutura de Programao
Namespaces
Melhor prtica: ponha todos os seus tipos em um nico namespace. Tenha um namespace especfico para sua empresa, projeto, produto, etc. Estude como as classes do .NET Framework so organizadas e se inspire nelas para criar a organizao de classes da sua empresa, projeto, produto, etc.

Estrutura de Programao
Referncias
No Visual Studio voc especifica referncias para um projeto. Cada referncia identifica um especfico assembly. Passada como referncia (/r ou /reference) para o compilador do C#.
csc HelloWorld.cs /reference:System.WinForms.dll

Estrutura de Programao
Namespaces vs. Referncias
Namespaces fornecem a capacidade de utilizar abreviaes de nomenclaturas a nvel de linguagem.

Para que voc no tenha que digitar um nome longo, completamente qualificado, repetidas vezes.

As referncias especificam que assembly deve ser utilizado.

Estrutura de Programao
O Mtodo Main
A execuo comea com o mtodo esttico Main(). Normalmente, pode haver s um mtodo com uma das seguintes assinaturas em um assembly:

static static static static

void Main() int Main() void Main(string[] args) int Main(string[] args)

Porm, voc pode ter mltiplas classes, cada com uma com um mtodo Main, se voc usar o comando /main para especificar a classe a usar.

Estrutura de Programao
Sintaxe
Identificadores:

Nomes para tipos, mtodos, dados, etc. Deve ser uma palavra inteira sem nenhum espao em branco. Caracteres Unicode Comea com uma letra ou com o sublinhado (_Teste) Sensvel a letras maisculas e minsculas (case sensitive). No devem ser utilizadas palavras-chave reservadas

A menos que prefixadas com @

Comandos
Introduo
Alta fidelidade ao C++ if, while, do requerem uma condio bool goto no pode saltar para blocos Comando switch

No permite falha

Comando foreach Comandos checked e unchecked Conjuntos de void Foo() i == 1; comandos devem } fazer o trabalho.

{ // erro

Comandos
Introduo
Seqncias de comandos Blocos de comandos Comandos rotulados Declaraes:

Comandos para repeties:


Constantes Variveis checked, unchecked lock using if switch

while do for foreach break continue goto return throw try throw

Comandos para desvios:


Expresses de comandos:

Comandos para condies:


Tratamento de excees:

Comandos
Sintaxe
Linhas de comandos so finalizadas com um ponto-e-vrgula (;) Da mesma forma que C, C++ e Java Blocos de comandos { ... } no precisam de um ponto-e-vrgula.

Comandos
Sintaxe
Comentrios:

// Comenta uma s linha, estilo C++ /* Comenta mltiplas linhas, estilo C */

Comandos
Seqncias & Blocos de Comandos
Seqncia de comandos: um ou mais comandos em seqncia. Bloco de comandos: uma seqncia de comandos delimitados por chaves { ... }
static void Main() { F(); G(); { // Incio do bloco H(); ; // Comando vazio I(); } // Fim do bloco }

Comandos
Variveis e Constantes

static void Main() { const float pi = 3.14; const int r = 123; Console.WriteLine(pi * r * r); int a; int b = 2, c = 3; a = 1; Console.WriteLine(a + b + c); }

Comandos
Variveis e Constantes
O escopo de uma varivel ou constante vlido do ponto da sua declarao at o fim do bloco onde foi declarada. Dentro deste escopo, ser gerado um erro se for declarada outra varivel ou constante com o mesmo nome.
{ int x; { int x; } }

// Erro: no possvel // redefinir a varivel x

Comandos
Variveis
Um valor deve ser atribudo s variveis antes delas poderem ser usadas.

Explicitamente ou automaticamente Camada definio de atribuio (definite assignment)

Atribuio automtica ocorre apenas para dados estticos, classes, instncias de classes e elementos de arrays.
void Foo() { string s; Console.WriteLine(s); } // Erro

Comandos
Comandos Rotulados & goto
O comando goto pode ser usado para transferir o controle para dentro ou para fora de um bloco, mas no em um bloco aninhado.
static void Acha(int valor, int[,] valores, out int linha, out int coluna) { int i, j; for (i = 0; i < valores.GetLength(0); i++) for (j = 0; j < valores.GetLength(1); j++) if (valores[i, j] == valor) goto Achei; throw new InvalidOperationException(No achado"); Achei: linha = i; coluna = j; }

Comandos
Expresses em Comandos
Comandos devem executar trabalhos

Atribuio de valores, chamadas de mtodos, ++, --, new etc.


static void Main() { int a, b = 2, c = 3; a = b + c; a++; MinhaClass.Foo(a,b,c); Console.WriteLine(a + b + c); a == 2; // ERRO! }

Comandos
Comando if
Exige uma expresso lgica (bool):
int Teste(int a, int b) { if (a > b) return 1; else if (a < b) return -1; else return 0; }

Comandos
Comando switch
Pode ramificar sobre qualquer tipo predefinido (inclusive string) ou enum

Os tipos definidos pelo usurio podem fornecer converso implcita para estes tipos.

Deve definir explicitamente como finalizar um caso ou ramificao:

Com break, goto case, goto label, return, throw ou continue Elimina falhas e bugs No necessita if nenhum cdigo provido depois do rtulo.

Comandos
Comando switch
int Teste(string rotulo) { int resultado; switch(rotulo) { case null: goto case ausente; case mais rpido: case vencedor: resultado = 1; break; case ausente: resultado = 2; break; default: resultado = 0; } return resultado; }

Comandos
Comando while
Exige uma expresso lgica (boleana)
int i = 0; while (i < 5) { ... i++; int i = 0; } do { ... i++; } while (i < 5);

while (true) { ... }

Comandos
Comando for
Exatamente como em C, C++ e Java
for (int i=0; i < 5; i++) { ... } for (;;) { ... }

Comandos
Comando foreach
Fornece simplicidade para manipulao de vetores e matrizes (arrays).
public static void Main(string[] args) { foreach (string s in args) Console.WriteLine(s); }

Comandos
Comando foreach
Manipulao de colees definidas pelo usurio. Criadas atravs da implementao de IEnumerable
foreach (Cliente c in Clientes.OrderBy("nome")) { if (c.Pedidos.Count != 0) { ... } }

Comandos
Comandos de Desvio
break

Sada da repetio (loop) mais interna Finaliza a repetio (loop) mais interna Transfere a execuo para o comando rotulado

continue

goto <label>

return [<expression>]

Sada de um mtodo
Manipulao de exceo

throw

Comandos
Tratamento de Excees
As excees constituem o mecanismo do C# para o tratamento de condies de erro inesperadas. Mais aperfeioadas por retornar valores de estado:

No podem ser ignoradas No precisam ser tratadas no ponto em que ocorrem Podem ser usadas at onde valores estado no so retornados (p.ex. atribuindo uma propriedade) Excees padro so fornecidas pelo C#

Comandos
Tratamento de Excees
Comando try...catch...finally O bloco try contm cdigo que pode causar uma exceo. O bloco catch trata a exceo:

Pode haver mltiplos blocos catch para tratar diferentes tipos de exceo.

O bloco finally contm cdigo que sempre ser executado:

No permitido usar comandos de desvio (p.ex. goto) para sair de um bloco finally.

Comandos
Tratamento de Excees
O comando throw gera uma exceo Uma exceo representada como uma instncia de System.Exception ou classe derivada:

Contm informaes sobre a exceo Propriedades:


Message StackTrace InnerException

Voc pode gerar novamente (rethrow) uma exceo, ou tratar (catch) uma exceo e gerar (throw) uma outra.

Comandos
Tratamento de Excees
try { Console.WriteLine(Tente executar"); throw new Exception(Gere um erro!); } catch (ArgumentNullException e) { Console.WriteLine(Peguei um erro!"); } catch { Console.WriteLine(Te peguei novamente!"); } finally { Console.WriteLine(Finalmente sa, ufa!"); }

Comandos
Sincronizao
Aplicativos com mltiplas camadas precisam se proteger contra acesso simultneo a dados:

Devem prevenir corrupo de dados

O comando lock (bloqueio) usa uma instncia para fornecer excluso mtua:

S um comando lock pode ter acesso uma mesma instncia Na verdade ele usa a classe System.Threading.Monitor do .NET Framework para fornecer excluso mtua.

Comandos
Sincronizao
public class AtualizaConta { decimal saldo; public void Deposito(decimal valor) { lock (this) { saldo += valor; } } public void Saque(decimal valor) { lock (this) { saldo -= valor; } } }

Comandos
using
No se trata da diretiva using, mas sim do comando. O C# gerencia automaticamente o uso da memria implementando um coletor de lixo (garbage collection)

Isso elimina a maioria de problemas de administrao de memria.

Porm, resulta em finalizao no determinstica:

No h garantia quando e se um objeto destruidor ou coletor de lixo chamado.

Comandos
using
Os objetos que precisam ser limpos depois de usados devem implementar a interface System.IDisposable

Um mtodo: Dispose()

O comando using permite que voc crie uma instncia, use-a, e ento se assegure que o mtodo Dispose chamado quando voc no precisar mais dela.

Dispose sempre chamado, como se ele estivesse em um bloco finally.

No confunda com a diretiva using.

Comandos
using
public class MeuRecurso : IDisposable { public void MeuRecurso() { // Aquisio do recurso } public void Dispose() { // Descarte do recurso } public void FaaAlgo() { ... } using (MeuRecurso r = new MeuRecurso()) { } r.FaaAlgo(); } // r.Dispose() chamado

Comandos
checked e unchecked
Os comandos checked e unchecked permitem que voc controle a verificao de overflow em operaes aritmticas e converses.

checked fora a verificao de overflow unchecked fora a no verificao de overflow

Voc pode usar ambos como bloco de instrues ou como uma expresso. O padro unchecked Use a opo /checked do compilador para fazer checked o padro.

Comandos
Entrada e Sada Bsicas
Aplicativos de console (janela DOS):

System.Console.WriteLine(); System.Console.ReadLine(); System.Windows.Forms.MessageBox.Show();

Aplicativos Windows:

string v1 = Algum dado; MeuObjeto v2 = new AlgumObjeto(); Console.WriteLine(O primeiro {0}, o segundo {1}, v1, v2);

Operadores
Introduo
O C# fornece um conjunto fixo de operadores, cujo significado definido para os tipos predefinidos. Alguns operadores podem ser sobrecarregados (por exemplo +) A tabela a seguir resume os operadores do C# por categoria:

As categorias esto em ordem de precedncia decrescente Os operadores em cada categoria tm a mesma precedncia

Operadores
Precedncia
Categoria Operadores
Agrupamento: (x) Acesso a membros: x.y Chamada de mtodos: f(x) Indexao: a[x] Incremento posterior: x++ Decremento posterior: x Chamada a construtor: new Recuperao de tipo: typeof Liga verificao aritmtica: checked Desliga verificao aritmtica: unchecked

Primrio

Operadores
Precedncia
Categoria Operadores
Valor positivo de: + Valor negativo de: Negao: ! Complemento Bitwise: ~ Pr-incremento: ++x Pr-decremento: --x Verifica tipo: (T)x Multiplicao: * Diviso: / Resto da diviso: %

Unrio

Multiplicativo

Operadores
Precedncia
Categoria
Aditivo Shift Adio: + Subtrao: Shift bits para esquerda: << Shift bits para a direita: >> Menor que: < Maior que: > Menor ou igual a: <= Maior ou igual a: >= Compatibilidade de tipo: is Converso de tipo: as

Operadores

Relacional

Operadores
Precedncia
Categoria
Igualdade Bitwise AND Bitwise XOR Bitwise OR Igual: == Diferente: != & ^ |

Operadores

Lgico AND
Lgico OR

&&
||

Operadores
Precedncia

Categoria
Ternrio condicional Atribuio ?:

Operadores

=, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |=

Operadores
Associatividade
Operadores de atribuio e ternrios condicionais so associativos direita:

As operaes so executadas da direita para a esquerda x = y = z avaliada como x = (y = z)

Todos outros operadores binrios so associativos esquerda:

As operaes so executadas da esquerda para a direita x + y + z avaliada como (x + y) + z

Use parnteses para controlar a ordem

Usando o Visual Studio.NET


Tipos de projetos:

Aplicativo de Console (janela DOS) Aplicativo Windows Aplicativo Web Web Service Windows Service Biblioteca de Classes ...

Usando o Visual Studio.NET


Janelas de trabalho:

Solution Explorer: componentes da soluo Class View: classes em uso Properties: propriedades de objetos Output: sadas do compilador Task List: lista de tarefas a executar Object Browser: navegao por objetos Server Explorer: acesso a servidores conectados Toolbox: componentes e ferramentas

Usando o Visual Studio.NET


Construindo: compilando o aplicativo Depurando: debugando erros

Pontos de parada (break points)

Referncias: referenciando componentes Salvando: gravando a aplicao

Usando o Visual Studio.NET


Demonstrao: O Visual Studio.NET

Referncias
http://msdn.microsoft.com http://windows.oreilly.com/news/hejlsberg_0800.html http://www.csharphelp.com/ http://www.csharp-station.com/ http://www.csharpindex.com/ http://msdn.microsoft.com/msdnmag/issues/0900/csharp/cs harp.asp http://www.hitmill.com/programming/dotNET/csharp.html http://www.c-sharpcorner.com/ http://msdn.microsoft.com/library/default.asp?URL=/libr ary/dotnet/csspec/vclrfcsharpspec_Start.htm Livro:

Beginning C# Programado, Karli Watson et all, Makron Books Pearson Education do Brasil, So Paulo - 2002

Você também pode gostar