Отправляет email-рассылки с помощью сервиса Sendsay

Финансы. Инструкция

  Все выпуски  

Уроки по C# и .NET.


Информационный Канал Subscribe.Ru

Уроки по C#. Рассылки сайта progs.biz  
Начало > C# > Windows > Урок 2

Фленов М. Программирование в Delphi глазами хакера.
Фленов М. Программирование в Delphi глазами хакера.
Заказать на Озоне


Полные версии уроков (с картинками): урок 2.

C# для Windows
Урок 2. Перехватываем ошибки

На прошлом уроке мы с вами написали первую программу для Windows на C#. У нее было много недостатков, в частности, не была предусмотрена ситуация, когда пользователь попытается разделить на ноль. Также не было предусмотрено, если пользователь вообще попытается ввести не число, а, скажем, буквы.

Вот этим мы сейчас и займемся.

Для обработки ошибок в C# предусмотрен так называемый механизм исключений. Самое важное, что пока надо понять - это то, что исключения являются экземплярами классов. Все классы для исключений являются потомками класса System.Exception (либо класс исключения совпадает с самим классом System.Exception).

Раз исключения - это классы, то у них есть методы и свойства.

Исключения бывают как предопределенные (т. е. соответствующие классы уже существуют в системе .NET-классов), так и заданные программистом (в этом случае программист должен объявить собственные, производные от System.Exception классы).

Давайте изменим текст программы прошлого урока так, чтобы программы не вылетала с ошибкой, когда мы делим на ноль или вообще вводим не число. Вот текст нового обработчика щелчка на кнопке:

        private void button1_Click(object sender, System.EventArgs e)
        {
            int result=0;
            // Пытаемся произвести деление.
            try
            {
                result = 
                    Convert.ToInt32(textBox1.Text)/Convert.ToInt32(textBox2.Text);
                label1.Text=result.ToString();
            }
            // Обрабатываем деление на ноль.
            catch(DivideByZeroException ex)
            {
                label1.Text = ex.Message;
            }
            // Обрабатываем отальные ошибки.
            catch
            {
                label1.Text = "Неизвестная ошибка!";
            }
        }

Как вы видите, мы заключаем потенциально опасную операцию в блок try:

            // Пытаемся произвести деление.
            try
            {
                ...
            }

Заключение в такой блок означает, что возникшую в нем ошибку мы сможем ниже обработать.

После блока try может идти один или несколько блоков catch. Каждый catch обслуживает свой вид исключения, которое указывается в скобках после catch. Если после catch в круглых скобках ничего не указать, то это будет обработчик по умолчанию (т. е. если исключение не было обработано одним из предыдущих обработчиков, то оно обработается тут). У нас обработчиков catch два - у первого параметром идет исключение деления на ноль, второй обрабчик - это обработчик по умолчанию:

            // Обрабатываем деление на ноль.
            catch(DivideByZeroException ex)
            {
                label1.Text = ex.Message;
            }
            // Обрабатываем остальные ошибки.
            catch
            {
                label1.Text = "Неизвестная ошибка!";
            }

Обратите внимание, что для обработчика деления на ноль мы в label выводим текст сообщения для возникшего исключения:

    ...
    label1.Text = ex.Message;
    ...

Для конструкции try есть еще необязательный блок finally, который мы не используем.

После запуска наша программа будет выдавать при делении на ноль соответствующее сообщение.

При вводе же не чисел будет выдаваться сообщение "Неизвестная ошибка!".

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


PARKING.RU. Качественный ВИРТУАЛЬНЫЙ ХОСТИНГ на платформе Windows(r): поддержка NET, многофункциональная панель управления, аренда бизнес-приложений, сертифицированные специалисты. Управляемый ВЫДЕЛЕННЫЙ ХОСТИНГ на платформе Windows(r): производительные серверы, профессиональная поддержка, аренда ПО Microsoft(r), безопасность, гарантии. http://www.parking.ru/


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

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться

В избранное