progs.biz  
Начало>VB.NET>Основы>Урок 49
C#
VB.NET
Visual C++.NET
ASP.NET
Visual C++ 6
WinAPI
C/C++
Delphi
C++ Builder
Java
SQL
PHP
DirectX
Visual Basic 6.0
Ассемблер
Интернет
Сист. прогр-ние
Pocket PC
Обзор книг
Обзор программ

Джон Коннелл. Разработка элементов управления Microsoft .NET на Microsoft Visual Basic .NET
Джон Коннелл. Разработка элементов управления Microsoft .NET на Microsoft Visual Basic .NET
Заказать на Озоне



Яндекс-цитирования

Основы 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.

Рассылки нашего сайта на Subscribe.Ru
Visual C++, MFC
C# и .NET
VB.NET
ASP.NET new!
Win API
C/C++
Delphi
Java
HTML, PHP, mySQL, WEB-дизайн
Flash MX
C++ Builder
Ассемблер
SQL Server
DirectX
Обзор книг
Обзор программ
Новости сайта progs.biz


 
 
Копирование любых материалов сайта без разрешения авторов и владельцев сайта запрещено.
© 2002-2008 сайт progs.biz
© 2002-2008 Игорь Алексеев