На прошлом уроке мы с вами написали первую программу для Windows на C#. У нее было много недостатков, в частности, не была предусмотрена ситуация, когда пользователь попытается разделить на ноль. Также не было предусмотрено, если пользователь вообще попытается ввести не число, а, скажем, буквы.
Вот этим мы сейчас и займемся.
Для обработки ошибок в C# предусмотрен так называемый механизм исключений. Самое важное, что пока надо понять - это то, что исключения являются экземплярами классов. Все классы для исключений являются потомками класса System.Exception (либо класс исключения совпадает с самим классом System.Exception).
Раз исключения - это классы, то у них есть методы и свойства.
Исключения бывают как предопределенные (т. е. соответствующие классы уже существуют в системе .NET-классов), так и заданные программистом (в этом случае программист должен объявить собственные, производные от System.Exception классы).
Давайте изменим текст программы прошлого урока так, чтобы программы не вылетала с ошибкой, когда мы делим на ноль или вообще вводим не число. Вот текст нового обработчика щелчка на кнопке:
Как вы видите, мы заключаем потенциально опасную операцию в блок try:
// Пытаемся произвести деление.try
{
...
}
Заключение в такой блок означает, что возникшую в нем ошибку мы сможем ниже обработать.
После блока try может идти один или несколько блоков catch. Каждый catch обслуживает свой вид исключения, которое указывается в скобках после catch. Если после catch в круглых скобках ничего не указать, то это будет обработчик по умолчанию (т. е. если исключение не было обработано одним из предыдущих обработчиков, то оно обработается тут). У нас обработчиков catch два - у первого параметром идет исключение деления на ноль, второй обрабчик - это обработчик по умолчанию: