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