Основы VB.NET Урок 49. Конструкция Try...Catch...Finally
Конструкция Try...Catch...Finally предназначена для обработки ошибок. Например, в программе из-за неправильно введенных пользователем данных может произойти деление на ноль или чтение файла с дискеты может окончится неудачей, так как пользователь не вставил дискету и т. п.
Именно для корректной обработки таких ситуаций и предназначены исключения, которые в свою очередь используются в констукции Try...Catch...Finally.
Вот пример:
Dim a, b, k As Integer
Dim arr() As Int32 = {0, 1, 12, 4}
Dim s As String
' Заключение потенциально опасного кода в Try...End Try.
Try
Console.Write("Enter number:")
s = Console.ReadLine()
' Конвертируем в число
' (возможно безуспешно!)
k = Convert.ToInt32(s)
' Читаем соответствующий элемент массива.
' (элемента с таким номером может не существовать!)
a = arr(k)
' Делим (возможно на ноль!).
b = 10 / a
Console.WriteLine("b = {0}", b)
Catch ex1 As IndexOutOfRangeException
' Если вышли за пределы массива.
Console.WriteLine(ex1.Message)
Catch ex2 As ArithmeticException
' Если арифметическая ошибка.
Console.WriteLine("Arithmetic exeption: {0}", ex2.Message)
Catch ex3 As Exception
' Если общая ошибка.
Console.WriteLine("Generic exeption: {0}", ex3.Message)
Finally
' Эта часть выполнится всегда.
Console.WriteLine("***")
End Try
End Sub
Как вы видите, код, который может вызвать ошибку, идет сразу после Try (до ближайшего Catch). В нашем примере для кода возможен целый ряд ошибок - деление на ноль, выход за пределы массива, попытка перевести в число строку, не содержащую цифр. Для каждой из таких ситуаций мы определяем свое исключение (Catch), причем каждое исключение имеет свой тип (например мы пишем Catch ex1 As IndexOutOfRangeException для исключения, возникающего при выхобе за пределы массива). После каждого Catch'а мы пишем соответствующий обработчик, который будет выполнятся, естественно, при возникновении исключения. У нас обработчиками является вывод некого текста на консоль.
Обратите внимание, что важно, в каком порядке мы пишем наши исключения. Так, сначала мы пишем частные исключения (выход за пределы массива, например) и в самом конце - самое общее исключение (у него тип просто Exception). Если бы мы сначала написали общее исключение, то возникло бы оно, а специализированные - нет.
Результат выполнения нашей программы будет зависеть от того, что пользователь введет.
Если пользователь введет 0, то возникнет исключение ArithmeticException, если 1 - то никакого исключения не возникнет, если, например, 100, то IndexOutOfRangeException, а если вообще не число, а, скажем, "sdsds", то просто Exception.
|