Главная страница Библиотека (скачать книги) Скачать софт Введение в программирование Стандарты для C++ Уроки по C# Уроки по Python HTML Веб-дизайн Ассемблер в среде Windows ActiveX Javascript Общее о Линукс Линукс - подробно Линукс - новое Delphi Паскаль для начинающих Турбопаскаль Новости Партнеры Наши предложения Архив новостей |
Обработка исключений.С Понятием исключения вы встречались в курсе С++.Настало время рассмотреть его в аспекте С#. Исключения в С# представлены классами. Все классы исключений могут быть унаследованы от встроенного класса исключений Exception, который является частью пространства имен System. Именно поэтому все исключения представляют собой подклассы класса Exception.Ниже показана иерархия наследования класса Exception. Exception ApplicationException CodeDomSerializerException InvalidPrinterException IOException IsolatedStorageException PathTooLongException CookieException ProtocolViolationException WebException MissingManifestResourceException SUDSGeneratorException SUDSParserException SystemException UriFormatException SoapException Внимательно взглянув на схему, вы увидите россыпь классов. Из всех них нас сейчас волнуют только 2 класса исключений – ApplicationException и SystemException.Они определяют две общие категории исключений: программные и исключения, образованные средой выполнения (т.е. CLR). Рассмотрим иерархию, происходящую из SystemException. SystemException AppDomainUnloadedException ArgumentException ArithmeticException ArrayTypeMismatchException BadImageFormatException CannotUnloadAppDomainException LicenseException WarningException ConfigurationException InstallException ContextMarshalException DataException DBConcurrencyException SqlException SqlTypeException RegistrationException ServicedComponentException ExecutionEngineException FormatException IndexOutOfRangeException InvalidCastException InvalidOperationException InvalidProgramException InternalBufferOverflowException ManagementException MemberAccessException MulticastNotSupportedException NotImplementedException NotSupportedException NullReferenceException OutOfMemoryException RankException AmbiguousMatchException ReflectionTypeLoadException ExternalException InvalidComObjectException InvalidOleVariantTypeException MarshalDirectiveException SafeArrayRankMismatchException SafeArrayTypeMismatchException RemotingException ServerException SerializationException CryptographicException PolicyException SecurityException VerificationException XmlSyntaxException TimeoutException StackOverflowException SynchronizationLockException ThreadAbortException ThreadInterruptedException ThreadStateException TypeInitializationException TypeLoadException TypeUnloadedException UnauthorizedAccessException XmlSchemaException XmlException XsltException Безусловно, такая обширная иерархия поражает! Каких в ней только классов нет, например :ArithmeticException – класс, который представляет арифметические исключения такие как DivideByZeroException (деление на ноль, наследуется из ArithmeticException) или OverflowException (переполнение, наследуется из ArithmeticException) и т.д. На основе класса исключений ApplicationException можно будет сформировать свои пользовательские классы исключений. try/catch и все,все,все ...Вся обработка исключений строится на 4 ключевых словах C#: try,catch,throw,finally.Первые три вы уже знаете из курса С++.В C# они используются приблизительно также. Приведем ряд примеров, для того чтобы показать принцип их работы. using System; class Sample { static void Main() { try{ int a=3; int b =0; int c =a/b; // Деление на ноль Console.WriteLine(c); } catch(DivideByZeroException){//сработает данный catch Console.WriteLine("Деление на ноль !!!"); } Console.Read(); } } Следующий пример показывает принцип работы нескольких catch. using System; class Sample { static void Main() { try{ int []ar = {4,2,8,4,2,6}; int []br = {2,2,4,0,2}; for(int i=0;i<ar.Length;i++){ try{ Console.WriteLine("{0}",ar[i]/br[i]); } catch(DivideByZeroException a){ Console.WriteLine("Деление на ноль !!!"); } //неправильный индекс catch(IndexOutOfRangeException b){ Console.WriteLine("Выход за пределы"); } } ar[50]=67; } // аналог catch(...) catch{ Console.WriteLine("Неизвестная Ошибка"); } Console.Read(); } } Для генерации исключения программно используется throw.Синтаксис использования: throw obj obj - объект класса исключения от наследованного от класса Exception. Рассмотрим пример: using System; class Sample { static void Main() { try{ throw new DivideByZeroException(); } catch(DivideByZeroException e){ Console.WriteLine("Деление на Ноль"); } // аналог catch(...) catch{ Console.WriteLine("Неизвестная Ошибка"); } Console.Read(); } } И, наконец, finally.Это блок кода, который вызывается после выхода из try/catch, помещается в конец последовательности try/catch.Блок finally вызывается в любом случае в не зависимости от того появилось исключение или нет.Например: using System; class Sample { static void Main() { try{ int a=3; int b=0; Console.WriteLine(a/b); } catch(DivideByZeroException e){ Console.WriteLine("Деление на Ноль"); } finally{ Console.WriteLine("Bye"); } Console.Read(); } } |
|
Библиотека программиста. 2009. |
|