Помогни ни да направим Uroci.net по - богат! Добави урок

Обработване на грешки по време на изпълнение

bubust   трудност:    видян: 8958



8.2.3 Класове на изключенията - Exception classes

Системното пространство от имена (System namespace) съдържа класа Exception, който е базов клас за съществени колекции на произхождащите класове (списъкът следва). Забележете, че идентификациите индицират наследяемостта.

EntryPointNotFoundException (петата отзад напред) наследява от TypeLoadException.

Exception

ApplicationException

SystemException

AccessException

FieldAccessException

MethodAccessException

MissingMemberException

MissingFieldException

MissingMethodException

AppDomainUnloadedException

AppDomainUnloadInProgressException

ArgumentException

ArgumentNullException

ArgumentOutOfRangeException

DuplicateWaitObjectException

ArithmeticException

DivideByZeroException

NotFiniteNumberException

OverflowException

ArrayTypeMismatchException

BadImageFormatException

CannotUnloadAppDomainException

ContextMarshalException

CoreException

ExecutionEngineException

IndexOutOfRangeException

StackOverflowException

ExecutionEngineException

FormatException

InvalidCastException

InvalidOperationException

MulticastNotSupportedException

NotImplementedException

NotSupportedException

PlatformNotSupportedException

NullReferenceException

OutOfMemoryException

RankException

ServicedComponentException

TypeInitializationException

TypeLoadException

EntryPointNotFoundException

TypeUnloadedException

UnauthorizedAccessException

WeakReferenceException

URIFormatException

Името на класа различава един тип грешка (exception) от друг. Свойствата и методите на exception обекта се наследяват от базовия клас Exception.

Когато пишем Catch блокове, винаги пред нас стои въпроса дали да впримчим родовия exception клас:

Sub test( )

Try

...

Catch e As Exception

...

End Try

End Sub

или специфични exception класове. Разбира се, момента да впримчим специфичен exception клас е когато искаме да обработим грешки различно базирани от техния клас. Има случаи, когато може да искаме да използваме предимствата на членове на отделен exception клас, който не е изпълнен в Exception base class. Например ArgumentException класа има свойство ParamName което връща името на параметъра, който указва грешката .

Сега, ако просто впримчваме родовия Exception class, както в кода:

Sub test( )

Try

Dim s, d As String

s = "c:temp.txt"

' опит за копиране на файла в невалиден път

FileCopy(s, d)

Catch e As Exception

MsgBox(e.Message)

End Try

End Sub

тогава не можем да използваме предимството на свойство ParamName. От друга страна, ако впримчим класа ArgumentException, като в кода:

Sub test1( )

Try

Dim s, d As String

s = "c:temp.txt"

' опит за копиране на файла в невалидна цел

FileCopy(s, d)

Catch e As ArgumentException

MsgBox(e.Message & " Parameter: " & e.ParamName)

End Try

End Sub

тогава можем да получим името на параметъра .

Поглед върху членовете на класа Exception:

Message property-Стринг, съдържащ съобщението за грешка.

Source property-Стринг, който описва апликацията или обекта причинили грешката.

StackTrace property-Стринг, който съдържа трасето на стека назабавно преди да се появи грешката.

TargetSite property-Стринг, който дава метода, който дава грешката.

ToString method-Стринг, който връща пълното име на грешката, вероятно съобщение за грешка, името на вътрешната грешка и трасето на стека . Синтаксис:

ToString( )

Представете си, че следния код се състои от три подпрограми . Първата, Exception0, съдържа инструкция Try...Catch.... В блока Try, подпрограма Exception0 вика подпрограма Exception1, която вика подпрограма Exception2.

Sub Exception0( )

Dim s As String

Try

Exception1( )

Catch e As Exception

s = "Message: " & e.Message

s = s & ControlChars.CrLf & "Source: " & e.Source

s = s & ControlChars.CrLf & "Stack: " & e.StackTrace

s = s & ControlChars.CrLf & "Target: " & e.TargetSite.Name

s = s & ControlChars.CrLf & "ToString: " & e.ToString

debug.writeline(s)

End Try

End Sub

Sub Exception1( )

Exception2( )

End Sub

Sub Exception2( )

Throw New ArgumentNullException( )

End Sub

В Exception2, има един ред от код, който изпълнява инструкция Throw, която "хвърля" грешката. Това е подобно на предизвикване на грешка с метод Err.Raise. Даже, както може да видите при ключова дума New, инструкция Throw всъщност създава обект от един от типовете exception.

Изходът от викането на Exception0 e:

Message: argument can't be null

Source:

Stack: at WindowsApplication3.Form1.Exception2( )

in C:VBNETForm1.vb:line 68

at WindowsApplication3.Form1.Exception1( )

in C:VBNETForm1.vb:line 66

at WindowsApplication3.Form1.Exception0( )

in C:VBNETForm1.vb:line 53

Target: Exception2

ToString: System.ArgumentNullException: argument can't be null

at WindowsApplication3.Form1.Exception2( )

in C:VBNETForm1.vb:line 68

at WindowsApplication3.Form1.Exception1( )

in C:VBNETForm1.vb:line 66

at WindowsApplication3.Form1.Exception0( )

in

C:VBNETForm1.vb:line 53


Страници: «1 2 3

Регистрирайте се, за да добавите коментар


Калдейта ЕООД - © 2003-2010. Всички права запазени.
Препоръчваме: Национален Бизнес | Bomba.bg | IT Новини | Диплома.бг | TRAVEL туризъм | Реферати | AmAm.bg | Иде.ли | Курсови работи | Фото Форум | Spodeli.net | Фото-Култ | Atol.bg | Elmaz.com | MobileBulgaria.com | Казанлък.Com