Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Как правило, в программировании рекомендуется обрабатывать определенный тип исключения, а не использовать основную catch
инструкцию.
При возникновении исключения оно передается вверх по стеку, и каждый блок обработки исключения получает возможность обрабатывать его. Порядок инструкций catch важен. Поместите блоки catch, предназначенные для конкретных исключений, до общего блока catch, иначе компилятор может выдать ошибку. Подходящий блок обработки исключений определяется сопоставлением типа исключения с именем исключения, указанного в блоке catch. Если нет определенного блока перехвата, исключение перехватывается общим блоком перехвата, если он существует.
В следующем примере кода используется блок try
/catch
для перехвата InvalidCastException. В примере создается класс Employee
с единственным свойством: уровнем сотрудника (Emlevel
). Метод, PromoteEmployee
принимает объект и увеличивает уровень сотрудника. Возникает InvalidCastException, когда экземпляр DateTime передается методу PromoteEmployee
.
using System;
public class Employee
{
//Create employee level property.
public int Emlevel
{
get
{
return(emlevel);
}
set
{
emlevel = value;
}
}
private int emlevel = 0;
}
public class Ex13
{
public static void PromoteEmployee(Object emp)
{
// Cast object to Employee.
var e = (Employee) emp;
// Increment employee level.
e.Emlevel = e.Emlevel + 1;
}
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.Message);
}
}
}
Public Class Employee
'Create employee level property.
Public Property Emlevel As Integer
Get
Return emlevelValue
End Get
Set
emlevelValue = Value
End Set
End Property
Private emlevelValue As Integer = 0
End Class
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
Public Shared Sub Main()
Try
Dim o As Object = 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.Message)
End Try
End Sub
End Class