обработка # исключение C
Аномалии в ходе выполнения программы проблем. C # является исключением в ответ на исключительные обстоятельства, возникающие, когда программа работает, например, попытка деления на ноль.
Исключение предусмотрено управление программой передается из одной части в другую часть пути. обработка # исключение C на основе четырех ключевых словвыше:попробуйте, поймать, наконец , ибросить.
- попробуйте: попытка блок идентифицирует конкретное исключение из блока кода , который будет активирован.Вслед за одним или несколькими улове блоков.
- поймать: поймать программу исключение через обработчик исключений.поймать ключевое слово указывает на ненормальное захват.
- наконец: наконец -то блок используется для выполнения данного заявления, независимо от того, будет ли выполнить исключение.Например, если вы открываете файл, независимо от того, должен быть файл исключением закрыт.
- бросить: Когда возникают проблемы, программа генерирует исключение.Используйте ключевые слова для завершения броска.
грамматика
Предположим, что блок ненормальным, метод с использованием ключевых слов и попытаться поймать исключение. Код попытаться / поймать блок защищен кодом, использование попытка / поймать как показано в следующем синтаксисе:
пробовать { } // Заявление, которое вызвало исключение поймать (ExceptionName e1) { // Ошибка код обработки} улов (ExceptionName е2) { // Ошибка код обработки} поймать (ExceptionName еп) { // Ошибка код обработки} в конце концов { // Операторы для выполнения}
Вы можете перечислить несколько операторов ловить, чтобы поймать различные типы исключений, чтобы предотвратить блок попытка генерирует несколько исключений при различных обстоятельствах.
Классы исключений в C #
C # исключение является использование представительского класса. Классы исключений в C # в основном прямо или косвенно производным от классаSystem.Exception.System.ApplicationException иSystem.SystemExceptionкласс является производным класса исключения классы System.Exception.
класс поддержкиSystem.ApplicationException генерируется за исключением приложений.Таким образом, программист определенные исключения должны быть выведены из этого класса.
System.SystemException класс все предопределенные система базового класса для исключений.
В следующей таблице перечислены некоторые получены из классов исключений предопределенная класса Sytem.SystemException:
异常类 | 描述 |
---|---|
System.IO.IOException | 处理 I/O 错误。 |
System.IndexOutOfRangeException | 处理当方法指向超出范围的数组索引时生成的错误。 |
System.ArrayTypeMismatchException | 处理当数组类型不匹配时生成的错误。 |
System.NullReferenceException | 处理当依从一个空对象时生成的错误。 |
System.DivideByZeroException | 处理当除以零时生成的错误。 |
System.InvalidCastException | 处理在类型转换期间生成的错误。 |
System.OutOfMemoryException | 处理空闲内存不足生成的错误。 |
System.StackOverflowException | 处理栈溢出生成的错误。 |
Обработка исключений
C #, чтобы попытаться поймать блок представлен в виде структурированной программы обработки исключений. Используя эти блоки, основные операторы программы и заявления обработки ошибок разделены.
обработка этих блоков Ошибка заключается в использованиипопробовать,и ,наконец,пойматьключевые слова , чтобы достичь. Вот исключение брошено при делении на ноль примеров:
с помощью системы; Пространство имен ErrorHandlingApplication { класса DivNumbers { INT результат; DivNumbers () { Результат = 0; } общественного недействительными деление (INT num1, INT пит2) { пробовать { результат = num1 / пит2; } улов (DivideByZeroException е) { Console.WriteLine ( "Исключение поймал: {0}", д); } в конце концов { Console.WriteLine ( "Результат: {0}", результат); } } статической силы основных (String [] агдз) { DivNumbers D = новые DivNumbers (); d.division (25, 0); Console.ReadKey (); } } }
Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:
Исключение поймал: System.DivideByZeroException: Попытка делить на ноль. в ... Результат: 0
Создание определяемого пользователем исключение
Вы также можете определить свои собственные исключения. Определенный пользователем класс исключения является производным от классаApplicationException.Следующий пример иллюстрирует этот момент:
с помощью системы; Пространство имен UserDefinedException { класс TestTemperature { статической силы основных (String [] агдз) { Температура Темп = новый температуры (); пробовать { temp.showTemp (); } улов (TempIsZeroException е) { Console.WriteLine ( "TempIsZeroException: {0}", e.Message); } Console.ReadKey (); } } } TempIsZeroException общественного класса: ApplicationException { TempIsZeroException общественности (строка сообщения): основание (сообщение) { } } Открытый класс температуры { ИНТ температура = 0; общественного недействительными showTemp () { если (температура == 0) { бросить (новый TempIsZeroException ( "нулевой температуры найден")); } еще { Console.WriteLine ( "Температура: {0}", температура); } } }
Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:
TempIsZeroException: Ноль температуры найдено
Throwable
Если исключение прямо или косвенно производным от классаSystem.Exception, вы можете бросить объект.Вы можете использовать оператор поймать блок броска, чтобы бросить текущий объект следующим образом:
Поймать (Exception е) { ... Вбрасывание е }