Предисловие
Статья входит в подборку: C# Advanced Pack: Продвинутый уровень
Удобная навигация по подборке: тык
Введение
Привет, дружище! Сегодня мы продолжаем изучение C# и эта первая статья из нашей замечательной подборки C# Advanced Pack: Продвинутый уровень.
Сегодня мы будем разбирать исключения и ошибки, может быть даже научимся с ними работать, как пойдет, поехали!
Как не прострелить себе колено?
Исключения (на языке монахов - Exceptions), в целом, - это своего рода сигналы о том, что что-то пошло не так в твоей программе. Это может быть всё что угодно: неверные данные, проблемы с подключением к базе данных, закончилась память и так далее. Короче говоря, это когда программа говорит: "Ой, да ну тебя на три прекрасных!".
Соответственно, нам нужна контрмера этим словам. Благо, в C# у нас есть других три прекрасных, только уже не букв, а слов: try, catch, finally.
Познаем искусство Шаолиня
Try
Сначала идет блок try. Здесь ты как бы говоришь программе: "Слушай, давай попробуем выполнить эти операции, но будь на чеку, могут быть проблемы". И если вдруг что-то идет не так, программа не паникует, а спокойно переходит к следующему блоку - catch.
Catch
Блок catch - это твой ловец снов исключений. Здесь ты определяешь, что делать, если в блоке try что-то пошло не по плану. Можно даже устроить несколько разных catch для разных видов исключений, как варианты запасных выходов в случае пожара. Самое базовое исключение носит имя Exception, оно может отловить любое исключение, которое возникло в твоей программулине.
Finally
Ну и напоследок идет блок finally. Этот блок выполнится в любом случае*, было исключение или нет. Вне зависимости от того, поймал ли ты исключение либо не поймал и все пошло по твоему плану, - этот блок выполнится.
* - finally выполняется в любом случае, кроме одного - аварийное завершение твоей программы или смерть твоей пекарни.
Пример использования
Примечание: Блоки finally и catch являются необязательными, но хотя бы один из них должен обязательно присутствовать после блока try.
Какие виды исключений бывают?
В C# видов исключений вагон и маленькая тележка, но не переживай, мы не будем углубляться в каждое, а просто пробежимся по самым основным.
- Exception - отец всех исключений. Все остальные исключения в C# являются его детками и наследуются от него. Может поймать любой вид ошибки.
- SystemException - исключение, которые бросает сама система при различных неполадках.
- ArgumentException - исключение, связанное с аргументом/аргументами методов. Если ты передал что-то не то, что ожидалось, бац – и ты словил ArgumentException.
- IndexOutOfRangeException - поймаешь этого гада, когда ты пытаешься обратиться к элементу массива, которого нет. Как если бы ты попытался взять 8-й блин, когда стопка состоит из 7 блинов.
- NullReferenceException - очень распространенное исключение. Происходит, когда ты пытаешься работать с чем-то, что равно null. Ну, типа как пытаться пить чай из пустой чашки.
- InvalidCastException - словишь, когда ты пытаешься преобразовать объект в тип, в который его преобразовать нельзя. Превратить кошку в собаку не получится.
- IOException - исключение с вводом-выводом: проблемы с файлами, дисками и так далее.
- DivideByZeroException - исключение происходит, когда ты пытаешься поделить что-то на ноль. Неверная арифметическая операция и приложению капут.
Это были самые базовые исключения, которые будут встречаться тебе достаточно часто, с остальными познакомиться успеешь самостоятельно, обещаю - это весело!
Практические задачки
- Напиши код, который пытается делить число на ноль и обработай это исключение.
- Напиши программу, которая запрашивает у пользователя ввод числа и обрабатывает исключение, если введено не число.
- Придумай ситуацию, где бы тебе пригодился блок finally, и реализуй ее в коде.
Заключение
Вот мы и разобрались с нашей ответочкой на непредвиденные ошибки и обстоятельства в наших программах. Если у тебя будут вопросы - стучись, не стесняйся. Тут мы все друзья! А в следующей статье мы познакомимся с методами и их параметрами.
Ставь ❤️ и подписывайся на канал, до новых встреч!
Поддержать автора: