Você está na página 1de 43

Programao em C# com Visual Studio .

NET

Prof. Eder Samaniego Villalba

Gerenciando Erros e Excees


O C# facilita a separao do cdigo que implementa o fluxo principal do programa e do cdigo de manipulao de erros. try { Executa cdigo, se houver algum erro gera exceo e vai para o bloco catch .... correspondente. } catch (exceo identificador) { .... }

Programao em C#

Gerenciando Erros e Excees


try { .... } catch (exceo1 identificador) { .... } catch (exceo2 identificador) { .... } catch (exceo3 identificador) { .... } catch (exceo4 identificador) { .... }

Programao em C#

Gerenciando Erros e Excees

Exemplo:
try { int left = Convert.Int32(leftOp.Text); int right = Convert.Int32(leftOp.Text); int answer = doCalculation(left, right); result.Text = answer.ToString(); } catch (FormatException fexp) { .... }

Programao em C#

Gerenciando Erros e Excees

Quando FormatException acionada, a varivel fexp preenchida com um objeto que contm os detalhes da exceo. As informaes fornecidas pelos detalhes da exceo podem ser usadas para manipul-la. Se a exceo no for capturada pelo bloco try, por exemplo - um estouro da varivel inteira (OverflowException), procura-se o mtodo chamador.

Programao em C#

Gerenciando Erros e Excees

Aps ento verifica-se se o mtodo chamador usa um bloco try/catch, caso negativo, o mtodo chamador termina e retorna ao seu chamador, onde o processo repetido. Se um catch correspondente encontrado, ele executado e a execuo continua na primeira instruo aps o manipulador.

Programao em C#

Gerenciando Erros e Excees

Se aps a cascata no se encontrar um manipulador correspondente, o programa termina com uma esceo no manipulada. Se o programa estiver sendo executado no Visual em modo de depurao (F5), ento mesmo no encontrando a exceo o Visual pra e exibe uma mensagem na linha que gerou a exceo.

Programao em C#

Gerenciando Erros e Excees

Programao em C#

Gerenciando Erros e Excees

Programao em C#

Gerenciando Erros e Excees

Existem muitas excees no .NET Framework e qualquer programa pode acionar a maioria delas. As excees so organizadas em famlias, denominadas hierarquias de herana. FormatExceptio e OverflowException pertencem a uma famlia denominada SystemException.

Programao em C#

10

Gerenciando Erros e Excees

Ao invs de capturar cada uma das excees pode ser criado um manipulador que capture SystemException.
try { .... } catch (SystemException exp) { .... }

try { .... } catch (FormatException fex) { .... } catch(OverflowException oex) { .... }

Programao em C#

11

Gerenciando Erros e Excees


Todas as excees derivam de Exception. Se Exception for capturada estamos ento capturando toda e qualquer exceo.
try{ ..... } catch (Exception exp) { ..... }

Programao em C#

12

Gerenciando Erros e Excees


try{ ..... } catch (Exception exp) { ..... } catch(FormatException fex) { ..... }

Quem captura FormatException?

Programao em C#

13

Gerenciando Erros e Excees

Quando ocorre uma exceo, usado o primeiro manipulador encontrado pelo runtime que corresponde a exceo, os outros so ignorados. Deve-se colocar os manipuladores catch mais especficos antes de um geral.

Programao em C#

14

Gerenciando Erros e Excees

Melhorando nossa calculadora diferente.

Programao em C#

15

Gerenciando Erros e Excees

Programao em C#

16

Acionando Excees

Suponha que estejamos implementando um mtodo, nomeMes, que aceita um argumento int e retorna o nome do ms correspondente. O que deve ser retornado se por acaso o argumento for < 1 ou > 12? Na verdade, o mtodo no deve retornar nada, ao invs deve acionar uma exceo.

Programao em C#

17

Acionando Excees
public static string nomeMes(int mes) { switch (mes) { case 1: return Janeiro; case 2: return Fevereiro; .... default: throw new ArgumentOutOfRangeException(Ms Incorreto); } } A mensagem deve ser tratada no catch.

Programao em C#

18

Acionando Excees

importante lembrar que quando uma exceo acionada, ela altera o fluxo da execuo no programa. No se pode garantir que uma instruo ser sempre executada quando a instruo anterior terminar.

Programao em C#

19

Acionando Excees
TextReader reader = src.OpenText(); string line. while((line = reader.ReadLine())!=null) { source.Text += line + \r\n; } reader.Close();

A instruo reader.close() pode no executar se algum erro ocorrer antes.


Programao em C#

20

Acionando Excees

O fato de uma instruo especfica no ser executada nem sempre problema. Porm, se a instruo libera um recurso que foi adquirido em uma instruo anterior, ento a falha na execuo dessa instruo resultar na reteno do recurso. Por exemplo, se abrirmos o arquivo com sucesso, devemos fech-lo.

Programao em C#

21

Acionando Excees

Se no fizermos isto, podemos ficar sem manipuladores de arquivos. Imagine ento se formos usar banco de dados. A maneira de garantir que uma instruo seja sempre executada com um bloco finally. Ocorre imediatamente aps um try ou a um catch.

Programao em C#

22

Acionando Excees

Se a exceo for capturada localmente o catch executado primeiro, ento o finally executado Se a exceo no capturada localmente, o finally executado imediatamente. Finally sempre executado.

Programao em C#

23

Acionando Excees
TextReader reader = src.OpenText(); string line. while((line = reader.ReadLine())!=null) { source.Text += line + \r\n; } finally { if (reader!=null) reader.Close(); }

Programao em C#

24

Enumerao
So conjuntos de valores limitados. enum nome_conjunto {elementos}

enum Season {primavera, vero, outono, inverno}

Os nomes simblicos devem aparecer entre chaves, numa lista separada por vrgulas.

Programao em C#

25

Enumerao

Programao em C#

26

Enumerao

Cada enumerao tem um conjunto de valores inteiros associados aos seus elementos, iniciando com 0 por padro. Se desejarmos podemos associar constante~a um literal de enumerao.

enum Season {primavera = 1, vero, outono, inverno}

Programao em C#

27

Enumerao

Pode-se forncecer mais de um literal de enumerao ao mesmo valor subjacente.


Fall,Winter}

enum Season {Spring, Summer, Fall, Autumn =

Em uma enumerao seus literais recebem valores do tipo int. Voc pode economizar memria declarando os literais como um inteiro subjacente diferente.

enum Season: short {Spring, Summer, Fall, Winter}


Programao em C#

28

Enumerao

Crie um projeto Console Application. Crie um enum para representar os meses do ano. Entrada de dados:

Um nmero de 1 a 12

Sada:

O ms correspondente.

Cuide das excees que podem ser geradas.


Programao em C#

29

Enumerao

Programao em C#

30

Enumerao

Programao em C#

31

Enumerao

Programao em C#

32

Estruturas
Pode ter seus prprios campos, mtodos e construtores exatamente como uma classe, mas um tipo por valor. As estruturas so armazenadas na stack, a sobrecarga de gerenciamento de memria reduzida. struct nome { .... }

Programao em C#

33

Estruturas

Assim como nas classes, na maioria dos casos no aconselhvel tornar os campos de uma estrutura public. No h como garantir que os campos public contenham valores vlidos. Por exemplo, qualquer pessoa poder definir o valor de minutos e segundos como um valor maior que 60.

Programao em C#

34

Estruturas
struc Time { private int horas, minutos, segundos; public Time(int hh, int mm, int ss) { horas = hh % 24; minutos = mm % 60; segundos = ss % 60; } public int Horas() { return horas; } ... }

Programao em C#

35

Estruturas

Use structs para implementar conceitos simples cujas caractersticas principais so seus valores. O prximo exerccio tem por objetivo usas structs. Crie um projeto Windows Application e desenhe o seguinte formulrio.

Programao em C#

36

Estruturas
A comboBox Fone possui os seguinte valores: -Fixo residencial - Celular residencial - Fixo Trabalho - Celular Trabalho O boto Mostrar s deve ser habilitado aps o clique em salvar.

Programao em C#

37

Estruturas

A seqncia do exerccio deve ser:

Salvar, limpar, mostrar, sair.

Programao em C#

38

Estruturas

Programao em C#

39

Estruturas

Programao em C#

40

Estruturas

Programao em C#

41

Estruturas

Programao em C#

42

Estruturas

No ltimo exerccio foram deixados os campos da struct como public. Mudar a implementao para que os mesmos sejam private, adicione um construtor para a struct e as funes de retorno de cada item.

Programao em C#

43