Cómo: Utilizar excepciones específicas en un bloque Catch
Actualización: noviembre 2007
Cuando se produce una excepción, asciende por la pila y se da a cada uno de los bloques Catch la oportunidad de controlarla. El orden de las instrucciones Catch es importante. Ponga los bloques Catch dirigidos a excepciones específicas antes de un bloque Catch de excepción general, pues de lo contrario el compilador puede emitir un error. El bloque Catch adecuado se determina haciendo coincidir el tipo de excepción con el nombre de la excepción especificada en el bloque Catch. Si no hay un bloque Catch específico, un bloque Catch general, si lo hay, detecta la excepción.
En el siguiente ejemplo de código se utiliza un bloque try/catch para detectar una excepción InvalidCastException. En el ejemplo se crea una clase denominada Employee con una única propiedad, el nivel de empleado (Emlevel). Un método, PromoteEmployee, toma un objeto e incrementa el nivel del empleado. Se produce una InvalidCastException cuando se pasa una instancia de DateTime al método PromoteEmployee.
Ejemplo
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);
}
}
}
Common Language Runtime detecta las excepciones que no detecta un bloque Catch. Según cómo esté configurado el motor tiempo de ejecución, aparece un cuadro de diálogo de depuración o el programa se deja de ejecutar y aparece un cuadro de diálogo con información de la excepción. Para obtener información sobre la depuración, vea Depurar y generar perfiles de aplicaciones.
Vea también
Tareas
Cómo: Utilizar el bloque Try/Catch para detectar excepciones
Cómo: Iniciar excepciones explícitamente
Cómo: Crear excepciones definidas por el usuario
Cómo: Utilizar bloques Finally