Генерация исключений

Press any key to continue

At System.Convert.ToDouble(String value)

At System.Double.Parse(String s, NumberStyles style, IFormatProvider provider)

At System.Number.ParseDouble(String s, NumberStyles style, NumberFormatInfo info)

Mscorlib

Входная строка имела неверный формат.

Б8

Введите делитель

Введите делимое

Press any key to continue

Результат

Введите делитель

Введите делимое

Вариант – допущена ошибка при вводе:

***********

***********

at ConsoleApplication4.Class1.Main(String[] args) in d:\documents and settings\stud\мои документы\visual studio projects\consoleapplication4\class1.cs:line 23

Вопросы:

1. Что такое исключения?

2. На какие блоки делится программа для обработки исключения?

3. Какой код необходимо поместить в блок, помеченный ключевым словом try?

4. В какой блок необходимо поместить код для обработки исключения?

5. В какой последовательности необходимо размещать блоки для обработки наиболее общих и частных исключений?

6. Для чего предназначен блок finally при обработке исключений?

7. Как можно детализировать информацию о характере исключения?

8. Какой блок кода можно опустить из кода обработки исключения?


При возникновении ошибочной ситуации в блоке try должно генерироваться исключение. Генерация исключения осуществляется с помощью ключевого слова throw. При генерации исключения создается объект исключения – экземпляр класса, производного от базового класса System.Exception. Например, у нас имеется класс MyExcept, производный от класса System.Exception, тогда генерация исключения осуществляется следующим образом:

throw new MyExcept();

Этому исключению должен соответствовать блок для обработки исключения:

catch(MyExcept e)

{

:

}

Ниже приведенный пример демонстрирует генерацию пользовательских исключений:

using System;

namespace ConsoleApplication4

{

class Div

{

public static double fdv(double a,double b)

{

return(a/b);

}

}

class MyExcept:Exception

{

string msg = "";

public string Msg

{

get

{

return msg;

}

}

public MyExcept()

{

msg="Недопустимый делитель";

}

public MyExcept(string str)

{

msg=str;

}

}

class Class1

{

static void Main(string[] args)

{

try

{

Console.WriteLine("Введите делимое");

double m = Convert.ToDouble(Console.ReadLine());

Console.WriteLine("Введите делитель");

double n = Convert.ToDouble(Console.ReadLine());

if(n==5)

throw new MyExcept();

if(n==0)

throw new MyExcept("делить на ноль нельзя");

if(n>65000)

throw new MyExcept("слишком большой делитель");

double z = Div.fdv(m,n);

Console.WriteLine("Результат");

Console.WriteLine(z);

}

catch(MyExcept e)

{

Console.WriteLine(e.Msg);

}

catch(FormatException e)

{

Console.WriteLine(e.Message);

Console.WriteLine("***********");

Console.WriteLine(e.Source);

Console.WriteLine("***********");

Console.WriteLine(e.StackTrace);

}

}

}

}

Здесь генерируются исключения при попытке делить на ноль и на число больше чем 65000, кроме того, в данном примере также генерируется исключение при попытке делить на 5.

Обработчик исключения выводит при этом соответствующие сообщения.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: