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

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

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




                  maxValue = value 

              End If 

          Next 

          Console。WriteLine(〃Maximum value is (〃 &  maxValue & 〃)〃) 



               Another variation is as follows: 



          Dim elements As IList(Of Integer) = New List(Of Integer)() 

          elements。Add(1) 

          elements。Add(2) 

          elements。Add(3) 

          Dim runningTotal As Integer = 0 

          Dim maxValue As Integer = Integer。MinValue 

          For Each value As Integer In elements 

              If value 》 maxValue Then 

                  maxValue = value 

              End If 

              runningTotal = runningTotal + value 

          Next 


…………………………………………………………Page 259……………………………………………………………

                 C HA P TE R   9   ■    L E AR N I N G   A B O U T  L I ST S;   DE L E G AT E S ;   AN D  L A M B D A  E X PR E SSI O N S  237 



     For one or two instances; writing the For Each loop is not that problematic; but it would be  

if you needed to use the iterator code in a dozen places。 This type of code is harder to maintain  

and extend。 One way of being more efficient is to delegate the code to an abstract base class  

that is implemented to calculate the running total or maximum value。 The following is the  

plete code (you can place the three classes in separate files called IteratorBaseClass。vb;  

RunningTotal。vb; and MaximumValue。vb if you want to test this)。 



    MustInherit Class IteratorBaseClass  

        Protected Sub New(ByVal collection As IList(Of Integer)) 

            _collection = collection 

        End Sub 



        Public Function Iterate() As IteratorBaseClass 

            Dim element As Integer 

            For Each element In Me。_collection 

                ProcessElement(element) 

            Next 

            Return Me 

        End Function 



        Protected MustOverride Sub ProcessElement(ByVal value As Integer) 



        Private _collection As IList(Of Integer) 

    End Class 



    Class RunningTotal 

        Inherits IteratorBaseClass 

        Public Sub New(ByVal collection As IList(Of Integer)) 

            MyBase。New(collection) 

            Total = 0 

        End Sub 



        Protected Overrides Sub ProcessElement(ByVal value As Integer) 

            Total = Total + value 

        End Sub 



        Public Total As Integer 

    End Class 



    Class MaximumValue 

        Inherits IteratorBaseClass 

        Public Sub New(ByVal collection As IList(Of Integer)) 

            MyBase。New(collection) 

            MaxValue = Integer。MinValue 

        End Sub 


…………………………………………………………Page 260……………………………………………………………

238       CH AP T E R   9   ■    L E A R N IN G   AB OU T   L I ST S;   D E L E G A T E S;   A N D   L A M B DA   E X P R E S SI ON S  



                   Protected Overrides Sub ProcessElement(ByVal value As Integer) 

                       If (value 》 MaxValue) Then 

                           MaxValue = value 

                       End If 

                   End Sub 



                   Public MaxValue As Integer 

               End Class 



           Module Module1 

               Sub Main() 

                   Dim elements As IList(Of Integer) = New List(Of Integer)() 

                   elements。Add(1) 

                   elements。Add(2) 

                   elements。Add(3) 



                   Dim runningTotal As Integer = _ 

                     TryCast(New RunningTotal(elements)。Iterate(); RunningTotal)。Total 



                   Dim maximumValue As Integer = _ 

                     TryCast(New MaximumValue(elements)。Iterate(); MaximumValue)。MaxValue 



                   Console。WriteLine(〃RunningTotal (〃 & runningTotal & 〃)〃) 

                   Console。WriteLine(〃Maximum Value (〃 & maximumValue & 〃)〃) 

               End Sub 

           End Module 



                The rewritten code is much longer; even though the bolded code; which represents the  

           user code; is much shorter。 However; this code still isn’t right。 The code is ill fitting because the  

           problem that it addresses can be solved using another; simpler technique。 So; in a nutshell; you  

           can say the problem is that you want to solve a single particular technical problem using an  

           elegant piece of code that does not include repeated sections that have been copied and pasted。  

           A better solution is consider the code as two code blocks; and in the following section; you’ll  

           see how delegates can solve the problem of adding and keeping a running total。 



                                    WEIGHING THE ADVANTAGES OF REUSING CODE 



             Very often; when you write code; the code that performs the task directly is shorter and to the point。 When you  

             abstract the code and develop general classes; the code will begin to bloat and expand; but the advantage is  

             that the code can be reused。 So; when is abstracting code worth the effort? 

                   Consider the analogy of building a house。 You are constructing the trusses for the house。 You have a  

              blueprint that indicates that you need to build 50 trusses。 You could build each of the 50 trusses individually;  

             or you could build a jig to speed up building the trusses。 And herein lies the problem。 If the trusses can be built  

             without a jig in 10 hours; and with the jig in 2 hours; you would think building the jig was a good idea。 But not  

             so fast。 What if building the jig takes 20 hours? Then the time that you saved by using the jig you lost by  

              building the jig。  


…………………………………………………………Page 261……………………………………………………………

                  C HA P TE R   9   ■    L E AR N I N G   A B O U T  L I ST S;   DE L E G AT E S ;   AN D  L A M B D A  E X PR E SSI O N S  239 



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