• Добро пожаловать на сайт - Forumteam.men !

    Что бы просматривать темы форума необходимо зарегестрироваться или войти в свой аккаунт.

    Группа в телеграме (подпишитесь, что бы не потерять нас) - ForumTeam Chat [Подписатся]
    Связь с администратором - @ftmadmin

11. Обрабатываем исключения.

Redman

<FORUMTEAM>
Команда форума
Регистрация
13.11.17
Сообщения
13.343
Реакции
8.371
Баллы
1.200
FTC
203¢
Обработка исключений.
С Понятием исключения вы встречались в курсе С++.Настало время рассмотреть его в аспекте С#. Исключения в С# представлены классами. Все классы исключений могут быть унаследованы от встроенного класса исключений 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();
   
    }
}
 
Сверху Снизу