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

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

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




              additional rules regarding grammar。 When using  generics�察�you need to master creating abstractions。 

                    generics are an abstraction。 Just as interfaces are an abstraction of classes�察 �generics are an  

              abstraction above interfaces。 Interfaces define an intention�察�and  generics define an abstract implemen

              tation of an intention。 

                   What is challenging with  generics is getting your thoughts together into an abstract intention  

              implementation。 It is like writing a document!you write it once�察�read it over�察�rewrite it�察�read it over�察�and  

              rewrite it again。 With  generics�察�you are gathering thoughts together into a general plan of action。 This  

              is why some people are pletely confused and don¨t understand  generics。 Writing your own   

              generics code requires some forethought。 



           The Theory of a Server´Side Spreadsheet 



           The example in this chapter is a spreadsheet for security traders。 When you trade securities! 

           whether they are equities�察�bonds�察�options�察�or futures!you will be confronted with information  

           overload。 You might have seen pictures of traders with desks full of desktop monitors。 A trader  

           might have seven to eight monitors displaying various bits of information。 A trader is a very  

           specialized type of domain that requires its own ways of processing information。 One aspect  

           that makes writing applications for traders difficult is that the nature of the data constantly  

           changes�察�and types get more in the way than they help。 As a result�察�traders adore spreadsheets。 

                 Spreadsheets are useful because they can process large amounts of information in a relatively  

           ad hoc manner。 However�察�one downside to spreadsheets is that the processing time can  


´´´´´´´´´´´´´´´´´´´´´´Page 311´´´´´´´´´´´´´´´´´´´´´´´

                                                      CH AP T E R   1 1   *    L E A R N IN G   AB O U T   。 N E T  G E N E R I CS 289 



dramatically increase due to the constant pushing and pulling of the data to and from the  

spreadsheet。 To speed up processing�察�we will define and implement a spreadsheet that has the  

advantages of a traditional client´side spreadsheet。 



*Note  The theory and solution presented here are specific to the domain of trading�察�where the cost of hard

ware is well worth the ability to trade properly。 Therefore�察�specific design aspects assume that you have the  

latest and greatest hardware。 



     An initial attempt at a spreadsheet would be the following code that uses  generics�此�



Class Spreadsheet 

    Public Cells As Func��Of Object���┌撮� 

    Public State As Object�┌撮� 



    Public Sub New�┌� 

        Cells = New Func��Of Object����10�察�10�� ���� 

        State = New Object��10�察�10�� ���� 

    End Sub 



    Public Sub Execute�┌� 

        For col As Integer = 0 To Cells。GetLength��1�� 1 

            For row As Integer = 0 To Cells。GetLength��0�� 1 

                Console。WriteLine��col & ; ; & ; ; & row�� 

                If Cells��row�察�col�� IsNot Nothing Then 

                    State��row�察�col�� = Cells��row�察�col���┌� 

                End If 

            Next 

        Next 



    End Sub 

End Class 



     The sample spreadsheet is defined using the data members Cells and State。 Both data  

members are arrays with two dimensions。 The first dimension represents the rows�察�and the  

second dimension represents the columns。 You could define as many dimensions as you wish�察 �

but for the scope of the server spreadsheet�察�we take a two´dimensional approach。  

     The  Execute�┌� method goes through the individual rows and columns of the Cells data  

member�察�calculates the state of the cell�察�and assigns the state to the State data member。 The  

data member Cells represents a function that is executed to generate the result of a particular  

cell that is assigned to the data member State。 Both data members store and manipulate Objects�察 �

which makes the spreadsheet flexible。 However�察�a gain in one aspect means a reduction in  

another aspect�察�in this case�察�the loss is in performance。 But performance is what algorithmic  

trading software cannot sacrifice�察�and native types would be best。  

     To make the spreadsheet perform as fast as it can�察�we need to use fixed´dimension arrays。  

However�察�with fixed´dimension arrays�察�we are moving away from a traditional object´oriented  


´´´´´´´´´´´´´´´´´´´´´´Page 312´´´´´´´´´´´´´´´´´´´´´´´

290       CH AP T E R   1 1   *    L E A R N I N G   A B OU T   。 N E T  G E N E R I CS 



           approach。 You could argue that spreadsheets are not object´oriented at all and are a problem  

          with respect to programmability。 I would agree with that ment�察�but spreadsheets solve one  

           class of problems very elegantly。 In the case of financial trading software�察�they solve the problem of  

           managing very large amounts of data efficiently。  



           *Note  Object´oriented code is maintainable and extendable。 However�察�object´oriented code can be slow。 I  

           have done tests where I found fixed´dimension arrays perform two to three times faster than the equivalent  

           object´oriented application。 But performance is not always the primary consideration。 Also�察�fixed´dimension  

           arrays will not always give you the desired performance boost�察�because other parts of your code might be  

           much slower。 Therefore�察�generally�察�you should not use fixed´dimension arrays。 



                The Cells data member is a delegate�察�or lambda expression�察�that is defined using code similar  

           to the following。 When we want to fill a cell�察�we call the appropriate function on CellFactories�察 �

          which in turn returns the lambda expression that represents the new value stored in the cell�此�



           Module CellFactories 

               Public Function DoAdd��ByVal cell1 As Func��Of Object���察�_ 

                                     ByVal cell2 As Func��Of Object���� As Func��Of Object�� 

                   Return Function�┌� CType��cell1�┌��察�Double�� �� CType��cell2�┌��察�Double�� 

               End Function 



               Public Function DoMultiply��ByVal cell1 As Func��Of Object���察�_ 

                                          ByVal cell2 As Func��Of Object���� As Func��Of Object�� 

                   Return Function�┌� CType��cell1�┌��察�Double�� * CType��cell2�┌��察�Double�� 

               End Function 



               Public Function FixedValue��ByVal value As Object�� As Func��Of Object�� 

                   Return Function�┌� value 

               End Function 

           End Module 



                The lambda expressions can be used to add two cells together�察�multiply two cells together�察 �

           or store a fixed value。 With the lambda expressions and the spreadsheet�察�you have two pieces  

           of source code that�察�when bined�察�have the ability to solve plicated problems。 The key  

           idea that you need to take away is that the Spreadsheet class and the lambda expressions defined in  

           CellFactories do not know about each other。 The lambda expressions could be used in a context  

           other than a spreadsheet。 The only requirement is that the function types and signatures match。 

                The sample spreadsheet that would be used to add and multiply some cells together would  

           be as follows�此�



           Dim spreadsheet As Spreadsheet = New Spreadsheet�┌� 



           spreadsheet。Cells��1�察�0�� = CellFactories。FixedValue��10。0�� 

           spreadsheet。Cells��0�察�1�� = CellFactories。FixedValue��10。0�� 


´´´´´´´´´´´´´´´´´´´´´´Page 313´´´´´´´´´´´´´´´´´´´´´´´

                                                       CH AP T E R   1 1   *    L E A R N IN G   AB O U T   。 N E T  G E N E R I CS 291 



spreadsheet。Cells��1�察�2�� =  _ 

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