Como: Usar exceções específicas em um bloco Catch
Quando ocorre uma exceção, ela é passada acima na pilha e a cada bloco catch é dada a oportunidade para tratá-lo.A ordem das instruções catch é importante.Coloque blocos catch direcionados para exceções específicas antes de uma exceção geral do bloco catch ou o compilador pode emitir um erro.O bloco catch adequado é determinado ao corresponder o tipo da exceção para o nome da exceção especificada na bloco catch.Se não houver nenhum bloco catch específico, a exceção é detectada por um bloco catch geral, se houver.
O exemplo de código a seguir usa um bloco try/catch para capturar uma InvalidCastException.O exemplo cria uma classe chamada Employee com uma única propriedade, nível do funcionário (Emlevel).Um método , PromoteEmployee, utiliza um objeto e incrementa o nível do funcionário.Uma InvalidCastException ocorre quando uma instância DateTime é passada para o método PromoteEmployee.
Exemplo
Imports System
Public Class Employee
'Create employee level property.
Public Property Emlevel() As Integer
Get
Return emlevel
End Get
Set
emlevel = value
End Set
End Property
Private emlevel As Integer
End Class 'Employee
Public Class Ex13
Public Shared Sub PromoteEmployee(emp As [Object])
'Cast object to Employee.
Dim e As Employee = CType(emp, Employee)
' Increment employee level.
e.Emlevel = e.Emlevel + 1
End Sub 'PromoteEmployee
Public Shared Sub Main()
Try
Dim o = New Employee()
Dim newyears As New DateTime(2001, 1, 1)
'Promote the new employee.
PromoteEmployee(o)
'Promote DateTime; results in InvalidCastException as newyears is not an employee instance.
PromoteEmployee(newyears)
Catch e As InvalidCastException
Console.WriteLine(("Error passing data to PromoteEmployee method. " + e))
End Try
End Sub 'Main
End Class 'Ex13
using System;
public class Employee
{
//Create employee level property.
public int Emlevel
{
get
{
return(emlevel);
}
set
{
emlevel = value;
}
}
int emlevel;
}
public class Ex13
{
public static void PromoteEmployee(Object emp)
{
//Cast object to Employee.
Employee e = (Employee) emp;
// Increment employee level.
e.Emlevel = e.Emlevel + 1;
}
public static void Main()
{
try
{
Object o = new Employee();
DateTime newyears = new DateTime(2001, 1, 1);
//Promote the new employee.
PromoteEmployee(o);
//Promote DateTime; results in InvalidCastException as newyears is not an employee instance.
PromoteEmployee(newyears);
}
catch (InvalidCastException e)
{
Console.WriteLine("Error passing data to PromoteEmployee method. " + e);
}
}
}
O Common Language Runtime captura exceções que não são detectadas por um bloco catch.Dependendo de como o tempo de execução é configurado, ou uma caixa de diálogo de depuração aparece, ou o programa para a execução e uma caixa de diálogo com informações da exceção aparece.Para obter informações sobre depuração, consulte Depuração e Criação de Perfis de Aplicativos.
Consulte também
Tarefas
Como: Use o bloco try/catch para interceptar exceções
Como: Lançar exceções explicitamente
Como: Criar exceções definida pelo usuário
Conceitos
Classe Exception e suas Propriedades