Учебники

VB.Net — Обработка исключений

Исключением является проблема, возникающая при выполнении программы. Исключением является ответ на исключительное обстоятельство, которое возникает во время работы программы, например, попытка деления на ноль.

Исключения предоставляют способ передачи управления из одной части программы в другую. Обработка исключений в VB.Net основана на четырех ключевых словах — Try , Catch , Наконец и Throw .

  • Try — блок Try определяет блок кода, для которого будут активированы определенные исключения. За ним следует один или несколько блоков Catch.

  • Поймать — программа ловит исключение с помощью обработчика исключений в том месте программы, где вы хотите решить проблему. Ключевое слово Catch указывает на перехват исключения.

  • Наконец, — блок «Последний» используется для выполнения заданного набора операторов независимо от того, было ли выброшено исключение или нет. Например, если вы открываете файл, он должен быть закрыт независимо от того, возбуждено ли исключение или нет.

  • Бросок — программа выдает исключение при обнаружении проблемы. Это делается с помощью ключевого слова Throw.

Try — блок Try определяет блок кода, для которого будут активированы определенные исключения. За ним следует один или несколько блоков Catch.

Поймать — программа ловит исключение с помощью обработчика исключений в том месте программы, где вы хотите решить проблему. Ключевое слово Catch указывает на перехват исключения.

Наконец, — блок «Последний» используется для выполнения заданного набора операторов независимо от того, было ли выброшено исключение или нет. Например, если вы открываете файл, он должен быть закрыт независимо от того, возбуждено ли исключение или нет.

Бросок — программа выдает исключение при обнаружении проблемы. Это делается с помощью ключевого слова Throw.

Синтаксис

Предполагая, что блок вызовет исключение, метод перехватывает исключение, используя комбинацию ключевых слов Try и Catch. Блок Try / Catch размещается вокруг кода, который может генерировать исключение. Код в блоке Try / Catch называется защищенным кодом, и синтаксис использования Try / Catch выглядит следующим образом:

Try
   [ tryStatements ]
   [ Exit Try ]
[ Catch [ exception [ As type ] ] [ When expression ]
   [ catchStatements ]
   [ Exit Try ] ]
[ Catch ... ]
[ Finally
   [ finallyStatements ] ]
End Try

Вы можете перечислить несколько операторов catch для перехвата различных типов исключений в случае, если ваш блок try вызывает более одного исключения в разных ситуациях.

Классы исключений в .Net Framework

В .Net Framework исключения представлены классами. Классы исключений в .Net Framework в основном прямо или косвенно являются производными от класса System.Exception . Некоторыми из классов исключений, полученных из класса System.Exception, являются классы System.ApplicationException и System.SystemException .

Класс System.ApplicationException поддерживает исключения, генерируемые прикладными программами. Таким образом, исключения, определенные программистами, должны быть производными от этого класса.

Класс System.SystemException является базовым классом для всех предопределенных системных исключений.

В следующей таблице представлены некоторые предопределенные классы исключений, полученные из класса Sytem.SystemException.

Исключительный класс Описание
System.IO.IOException Обрабатывает ошибки ввода / вывода.
System.IndexOutOfRangeException Обрабатывает ошибки, сгенерированные, когда метод ссылается на индекс массива вне диапазона.
System.ArrayTypeMismatchException Обрабатывает ошибки, возникающие, когда тип не соответствует типу массива.
System.NullReferenceException Обрабатывает ошибки, сгенерированные в результате определения нулевого объекта.
System.DivideByZeroException Обрабатывает ошибки, возникающие при делении дивиденда на ноль.
System.InvalidCastException Обрабатывает ошибки, сгенерированные во время приведения типов.
System.OutOfMemoryException Обрабатывает ошибки, возникающие из-за недостатка свободной памяти.
System.StackOverflowException Обрабатывает ошибки, вызванные переполнением стека.

Обработка исключений

VB.Net предоставляет структурированное решение проблем обработки исключений в виде блоков try и catch. Используя эти блоки, основные программные операторы отделены от операторов обработки ошибок.

Эти блоки обработки ошибок реализованы с использованием ключевых слов Try , Catch и finally. Ниже приведен пример создания исключения при делении на ноль:

Live Demo

Module exceptionProg
   Sub division(ByVal num1 As Integer, ByVal num2 As Integer)
      Dim result As Integer
      Try
         result = num1 \ num2
      Catch e As DivideByZeroException
         Console.WriteLine("Exception caught: {0}", e)
      Finally
         Console.WriteLine("Result: {0}", result)
      End Try
   End Sub
   Sub Main()
      division(25, 0)
      Console.ReadKey()
  End Sub
End Module

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —

Exception caught: System.DivideByZeroException: Attempted to divide by zero. 
at ...
Result: 0

Создание пользовательских исключений

Вы также можете определить свое собственное исключение. Определяемые пользователем классы исключений являются производными от класса ApplicationException . Следующий пример демонстрирует это —

Live Demo

Module exceptionProg
   Public Class TempIsZeroException : Inherits ApplicationException
      Public Sub New(ByVal message As String)
         MyBase.New(message)
      End Sub
   End Class
   Public Class Temperature
      Dim temperature As Integer = 0
      Sub showTemp()
         If (temperature = 0) Then
            Throw (New TempIsZeroException("Zero Temperature found"))
         Else
            Console.WriteLine("Temperature: {0}", temperature)
         End If
      End Sub
   End Class
   Sub Main()
      Dim temp As Temperature = New Temperature()
      Try
         temp.showTemp()
      Catch e As TempIsZeroException
         Console.WriteLine("TempIsZeroException: {0}", e.Message)
      End Try
      Console.ReadKey()
   End Sub
End Module

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —

TempIsZeroException: Zero Temperature found

Бросать предметы

Вы можете выбросить объект, если он прямо или косвенно является производным от класса System.Exception.

Вы можете использовать оператор throw в блоке catch, чтобы выбросить текущий объект как —

Throw [ expression ]

Следующая программа демонстрирует это —

Module exceptionProg
   Sub Main()
      Try
         Throw New ApplicationException("A custom exception _ is being thrown here...")
      Catch e As Exception
         Console.WriteLine(e.Message)
      Finally
         Console.WriteLine("Now inside the Finally Block")
      End Try
      Console.ReadKey()
   End Sub
End Module

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —