友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

VB2008从入门到精通(PDF格式英文版)-第66章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




          eter buffer into a series of string tokens。 Using safe exception coding; if the data could not be  

          parsed; you could throw an exception; or you could return a Nothing value indicating that the  

          buffer could not be parsed。 

                The caller code knows that there is the possibility of a Nothing value when calling Tokenize();  

          and thus has an If test to check for the Nothing value。 The If test is defensive coding; but it also  

          adds plexity because you need to verify for a Nothing value。 

               What if Tokenize() were a bit smarter and decided to return an empty array to indicate an  

          empty result set? The logic of this is not incorrect; because the caller expects either a result set  

          with items or a result set with nothing in it。 If a dramatically bad parsing error has occurred; the  

          only recourse is to throw an exception。 Here is the rewritten code: 



          Class DefaultStateRight  

              Private Function Tokenize(ByVal buffer As String)  As String() 

                  Return New String(…1) { } 

              End Function 



              Public Sub IterateBuffers(ByVal buffer As String)  

                  Dim found As String() = Tokenize(buffer) 

                  For c1 As Integer = 0 To found。Length 1 

                      Console。WriteLine(〃Found (〃 & found(c1) & 〃)〃) 

                  Next 

              End Sub 

           End Class 



                In the rewritten code; Tokenize() returns an empty array that; when iterated using a For  

          loop; will cause zero iterations。 This is exception…safe code with improved readability。 

                But what happens if Tokenize() does throw an exception? With Tokenize() throwing an  

          exception and the lack of a Try/Catch block in IterateBuffers(); it looks like IterateBuffers()  

          is written incorrectly。 However; IterateBuffers() is not written incorrectly; because Tokenize()  

          will throw an exception only if something really problematic has occurred。 A big problem is  

          beyond the scope of the IterateBuffers() method; and thus needs to be handled at a higher  

          level。 Think of it as the situation where you have a criminal case and the local municipal court  

          automatically delegates the case to the provincial or state level; because those courts are equipped  

          to deal with such a case。 


…………………………………………………………Page 155……………………………………………………………

                                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 133 



Processing Errors That Are Warnings 



One of the silliest things that programs do is exit when they could have continued working。 It  

reminds me of when my family lived on the French Rivera; where it does not rain too often。 Our  

two bulldogs were used to the nice weather; and at the slightest hint of moisture in the air; they  

would refuse to go outside。 Our male dog Big Boss (Man) would stand in the doorway; stick his  

nose out slightly; and take a few deep breaths。 If he sensed the slightest bit of moisture; instantly  

you were dragging an 80…pound concrete block。 

     The point is that; like our bulldogs; programs sometimes overreact to situations。 For fear  

of having problems or not doing something correctly; they instantly shut down。 

     Let’s say that you have a program that requires a configuration file to run。 What happens  

when the configuration file does not exist? One approach is to panic and exit。 The panic approach  

will work; but what if multiple problems follow from the first one? Then you are painstakingly  

hitting one error after another。 Another approach is to use a default action。 In this example; the  

default action could be to display a dialog box asking the user to select a configuration file; or  

the program could create a default file; as in this example: 



Try  

    LoadConfiguration() 

Catch ex As ConfigurationException 

     CreateDefaultConfiguration() 

End Try 



     Here; the  LoadConfiguration() method is in a Try/Catch block; but the Catch block  

catches only ConfigurationException failures (a built…in Visual Basic exception)。 If there is a  

ConfigurationException failure; then a default configuration is created。 With a default config

uration; the program can continue processing。 Using the filtering capabilities of exceptions; if  

another exception is thrown in  LoadConfiguration(); then some higher…level exception  

handler will process it。 

     When processing an error that is a warning; the important steps are to filter for the specific  

exception and implement an appropriate exception handler that has been properly tested。 Don’t  

try to implement a fix…all exception handler; because you will never be able to implement a  

proper handler and thus will cause more problems。 In the handler to fix the problem; make  

sure that you don’t generate an exception。 If you do; that exception will be sent to a higher  

method caller。 



The Important Stuff to Remember 



In this chapter; you learned about errors and exceptions。 Here are the key points to keep in mind: 



     o  Errors and exceptions will always occur in your programs。 



     o  Your code is split into a tree very much like a management hierarchy。 The hierarchy  

        contains two types of code: code that organizes and code that implements。  



     o  Exceptions are caught using Try/Catch blocks。 



     o  The Finally block is used to execute code; regardless of whether an exception is thrown;  

        and to reset state。 


…………………………………………………………Page 156……………………………………………………………

134       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 



               o  Code that implements has the responsibility of throwing exceptions。 Code that imple

                  ments does not tr
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!