嗔秤戻幣�哉膵�云利匈嬉蝕湊蛸賜�塋床四衲���萩晦編報炎嘔囚^泡仟 ̄云利匈�《超噌�殻窟�嵌虜隆輓麈觚翹瀘卉韮�仍仍�。� 烏御危列
浪慕利 卦指云慕朕村 厘議慕尺 厘議慕禰 TXT畠云和墮 序秘慕杏 紗秘慕禰

VB2008貫秘壇欺娼宥(PDF鯉塀哂猟井)-及47嫗

梓囚徒貧圭�鮗� ○ 賜 ★ 辛酔堀貧和鍬匈��梓囚徒貧議 Enter 囚辛指欺云慕朕村匈��梓囚徒貧圭�鮗� ● 辛指欺云匈競何��
!!!!隆堋響頼��紗秘慕禰厮宴和肝写偬堋響��






    Public Sub CalledMethod�┌�  

        Me。depth = 1 

        Try  

            CalledCalledMethod�┌� 

        Finally  

            Me。depth = 1 

        End Try 

    End Sub 

    Public Sub Method�┌�  

        Me。depth = 0 

        Try  

            CalledMethod�┌� 

        Finally  

            Me。depth = 0 

        End Try 

    End Sub 

    Public Function GetDepth�┌� As Integer 

        Return Me。depth 

    End Function 

End Class 



Class Tests  

    Sub TestCallingExample�┌�  

        Dim cls As CallingExample = Nothing 

        Try  

            cls = new CallingExample�┌� 

            cls。Method�┌� 

        Catch  exception1 As Exception 

        End Try 

        Console。WriteLine�─�Depth is �──�& cls。GetDepth�┌� & ;��;�� 

    End Sub 

    Public Sub RunAll�┌�  

        TestCallingExample�┌� 

    End Sub 

End Class 



     In this example�察�each  Finally keyword is associated with a Try block。 You don¨t need to  

associate a Catch block with a Try block if you are using  Finally。 If the Try block is entered�察 �

when the code leaves the Try block�察�regardless of whether it ran successfully or threw an excep

tion�察�the code within Finally is executed。 Thus�察�if stack unwinding occurs�察�it is possible to reset  

or assign state to a consistent value before the exception is processed elsewhere。 



*Note  When the  Finally block is called�察�you don¨t know if it is called due to an exception or successful  

code execution。 Thus�察�you shouldn¨t assume that Finally is called because an exception was thrown。 


´´´´´´´´´´´´´´´´´´´´´´Page 148´´´´´´´´´´´´´´´´´´´´´´´

126        CH AP T E R   5   *    L E A R N IN G   AB OU T   V I SU A L   B AS IC   E X C E P TI ON   H AN D L IN G 



           Sandboxing Your Code 



           The sandboxing technique is similar to playing with an Etch A Sketch�察�in that you attempt to  

           build a state�察�and if you make a mistake�察�you can throw the state away。 This requires that you  

           separate your code into three distinct steps�此�declaration�察�manipulation�察�and integration。 Figure 5´7  

           illustrates the three steps in sandboxing your code。 



                                                                      1。 Declaration�此�Each variable is 

                                                                  declared and assigned a default state 

             Function Separated�┌� As SeparateSteps                  that will not generate an exception 

                Dim cls As SeparateSteps = Nothing 



                cls = New SeparateSteps�┌�                    2。 Manipulation�此�Each variable is manipulated 

                cls。PossibleExceptionMethod�┌� 

                                                              using methods to create a state that does not 

                Return cls                                  alter anything outside the method。 The variables 

             End Function                                   may reference the global state�察�but not change it。 



                                     3。 Integration�此�Once the state has 

                                   been modified�察�an integration into the 

                                          bigger system can occur 



           Figure 5´7。 Sandboxing your code 



                 Figure 5´7 illustrates one way of performing a sandboxing operation�察�but there are many  

           other possible implementations。 In each of the different implementations�察�the objective is the  

           same�此�you want to perform the operations that could cause an exception apart from the main  

           code。 Then if you do have an exception�察�it will be localized to the separate code。 When the stack  

           unwinds�察�the other code won¨t be corrupted。 



           *Note  The rule of thumb with sandboxing your code is to keep all of the code manipulations that could  

           generate an exception separate from any existing state that could be corrupted。 Once the manipulations have  

           been carried out�察�you integrate the objects into the global state using method calls that are extremely unlikely  

           to generate exceptions。 For those situations when you must manipulate existing state�察�use a  Finally handler�察 �

           so that the previous existing state can be re´created if necessary。 



           Filtering Exceptions 



           In all of the examples presented so far in this chapter�察�the Catch statement used the Exception type�此�



           Catch exception1 As Exception  



                 Exception will catch every exception。 


´´´´´´´´´´´´´´´´´´´´´´Page 149´´´´´´´´´´´´´´´´´´´´´´´

                               CH AP T E R   5   *    L E AR N IN G   AB O U T   V I SU A L   B AS IC   E X CE PT I ON   HA N D L IN G 127 



     In Figure 5´3�察�the IDE caught an exception�察�referencing NullReferenceException�察�which is  

a specific type of exception。 When you use it in a Catch statement�察�you will catch only null refer

ence exceptions。 

     By specializing the exception�察�you have the ability to filter which exception you want to  

catch。 For example�察�NotSupportedException will catch only instances of NotSupportedException  

exceptions。 Here is an example�此�



Try  

    Throw New NotSupportedException�─�There is no code;�� 

Catch ex As NotSupportedException 

End Try 



     If the code within the Try block threw an instance of Exception�察�the Catch block would not  

trigger�察�because the Catch block was looking for a specific exception type。  

     Exception types can be bined to provide specific filtering capabilities。 The specific  

exception type should be the first exception after the Try block�察�as in this example�此�



Try  

    ' 。 。 。 

Catch ex1 As NotSupportedException 

     ' 

Catch ex2 As Exception 

     ' 

End Try 



     By bining multiple exception filters�察�you don¨t need to figure out which kind of excep

tion is being thrown。 For example�察�without the filtering capabilities of a Catch block to catch  

NotSupportedException exception types�察�you would need to write this code�此�



Try  

    Throw New NotSupportedException�─�There is no code;�� 

Catch ex As Exception 

    If ex Is NotSupportedException Then 

        '。 。 。 

    Else  

        Throw ex 

    End If 

End Try 



     Table 5´1 lists mon exception types in the System namespace that you can throw or  

can be thrown。 There are many more exceptions�察�and you can even generate your own excep

tions by subclassing  Exception。  


´´´´´´´´´´´´´´´´´´´´´´Page 150´´´´´´´´´´´´´´´´´´´´´´´

128        CH AP T E R   5   *    L E A R N IN G   AB OU T   V I SU A L   B AS IC   E X C E P TI ON   H AN D L IN G 



           Table 5´1。  mon Exception Types 



           Exception                                  Description 



           Exception                                  Plain´vanilla exception�察�a general container for all exceptions。  

                                                      When you get one of these exceptions�察�look at the Message  

                                                      property for the exact details。 If you throw this type of excep

                                                      tion�察�it is important to supply an easy´to´understand string to  

                                                      the exception constructor。 



           ArgumentException                          Thrown if you call a method and one of the arguments is not  

                                                      valid。 Typically�察�in the Message property you can find the  

                                                      problem with the arguments。 If this exception is thrown�察�it is  

                                                      because the contents of the argument are wrong。 



           ArgumentNullException                      Thrown if you call a method where one of the arguments is
卦指朕村 貧匯匈 和匯匈 指欺競何 壘��0�� 家��0��
隆堋響頼��紗秘慕禰厮宴和肝写偬堋響��
梁椣戻幣�� 梁心弌傍議揖扮窟燕得胎��傍竃徭失議心隈才凪万弌誌育断蛍�輌臆惨軼僑〃�燕慕得珊辛參資誼持蛍才将刮襲潜��範寔亟圻幹慕得 瓜寡追葎娼得辛參資誼寄楚署衛、持蛍才将刮襲潜填��