Иллюстрированный самоучитель по VB.NET


Наличие нескольких секций Catch


Одной секции Try в VB .NET может соответствовать несколько секций Catch. Каждая секция перехватывает определенную категорию исключений, при этом для идентификации ошибок используются объекты классов, производных от базового класса Exception. Пример:

Sub Main()

Dim args(). argument As String Try

args = Environment.GetCormandLineArgs()

ProcessFile(argsd))

Catch indexProblem As IndexOutOfRangeException

Console.WriteLine("ERROR - No file name supplied")

Catch ioProblem As System.10.I0Exception

Console.WriteLine("ERROR - can't process file named " & args(D)

Catch except As Exception

' Прочие исключения

End Try

Console.WriteLine("Press enter to end")

Console. ReadLine()

End Sub

В данном примере программа последовательно просматривает все секции Catch, пытаясь найти совпадение. Если пользователь не указал имя файла, совпадение будет найдено в первой секции. Вторая секция должна совпадать в том случае, если при вызове ProcessFile не удастся обработать файл (возможные причины рассматриваются далее). Если первые два случая не подошли, остальные исключения перехватываются последней секцией Catch.

Обнаружив подходящую секцию Catch, VB выполняет ее. Код других секций Catch при этом не выполняется.

Совпадение считается обнаруженным, если текущее исключение относится к типу, указанному в заголовке секции Catch, или производному от него. Например, класс FileNotFoundException является производным от I0Exception, поэтому следующий фрагмент неправилен:

Try

ProcessFile(args(1))

Catch indexProblem As IndexOutOfRangeException

Console.WriteLinet"ERROR = No file name supplied")

Catch IOProblem As System.IO.l0Exception

Console. WriteLinet "ERROR = can't process file named " & args(D)

Catch fileNotFound As System.IO.FileNotFoundException

End Try

Специализированное исключение FileNotFoundException будет поглощено предыдущей секцией, перехватывающей исключение базового класса l0Exception.

Из сказанного следует, что размещать секции Catch после секции Catch e As Exception бесполезно.


- Начало -  - Назад -  - Вперед -



Книжный магазин