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

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

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






     Using either the fixed…content or ReDim approach; you allocate space for the array and assign  

the variables representing the cities to the individual elements of the array。 Since Connections  

is an array of value types; the connections within the connections are not set; as shown in  

Figure 4…10。 



Figure 4…10。  The problem of the missing connections for New York 



     The problem is that the Connections array for New York is missing。 Of course; you could be  

logical and say it is missing because the Connections data member for New York has not yet  

been defined。 But; and it is a big but; think about how data is referenced and think about the  

behavior summarized in Table 4…1。 

      Node is a value type; and when a value type is assigned; the values within the type are copied。  

Because the connections for New York have not been assigned; the Montreal Connections array  

will not contain any connections from New York。 And if you modify the original variable for  

New York and its connections; those changes will not be reflected in the array of connections  

that Montreal has。 

     At this point; you might think this is not a problem; but consider the following New York code: 



ReDim newyork。Connections(2)  

newyork。Connections(0) = montreal 

newyork。Connections(1) = houston 

newyork。Connections(2) = miami 



     In this example; New York has a connection to Montreal; and Montreal has a connection  

to New York; pleting a full circle。 muters would want this ability to fly back and forth  

between cities。 But because we are using value types; it is not possible to fly back and forth; as  

illustrated by Figure 4…11。 

     Figure 4…11 illustrates that recursion with value types does not work。 It shows that there  

are connections from New York to Montreal。 But following the connection to Montreal; it would  

appear that New York has no connections; which is blatantly false; because we can see the  

connection from New York to Montreal。 


…………………………………………………………Page 116……………………………………………………………

94        CH AP T E R   4   ■    L E A R N IN G   AB OU T   D AT A  S TR U CT U R E S;   DE CI SI ON S;   A N D   L O OP S 



           Figure 4…11。 Missing connections for New York 



                When value types are assigned; you are copying contents of the value type and thus getting  

           a snapshot of the state of an object at some period in time。 In essence; the code illustrates the  

           chicken…and…egg problem of defining the connections for a particular city and then assigning  

           them。 For value types; how can you assign the connection of one city to another when the to

           be…assigned connection does not exist? The short answer is you can’t。 The long answer is you  

           can; but it would mean executing an infinite loop; which is of no use to us; because we want to  

           do something with the data once it has been assigned。 



           Switching to a Class to Define a Node 



           To fix the chicken…and…egg problem; we need to use reference types instead of value types。 This  

           means we need to change the declaration of Node from a  Structure to a Class; as follows: 



           Public Class Node  

             Public Shared RootNodes As Node() 

             Public CityName As String 

             Public X As Double 

             Public Y As Double 

             Public Connections As Node() 


…………………………………………………………Page 117……………………………………………………………

                          CH AP T E R   4   ■    L E A R N I N G   A B OU T   D AT A  S TR U CT U R E S;   DE CI SI ON S;   A N D   L O OP S 95 



    Public Sub New(ByVal city As String; ByVal X As Double; ByVal Y As Double)  

        Me。CityName = city 

        Me。X = X 

        Me。Y = Y 

        Me。Connections = Nothing 

    End Sub 

End Class 



      The change is a one…liner。 After the switch; if we executed the same assignment code as in  

the previous section when Node was a value type; the data structure shown in Figure 4…12 would  

be created。 



Figure 4…12。 A valid state for the New York Node instance 



      Looking at the node structure in Figure 4…12; you can see that New York points to Montreal  

and back again。 The infinite connection does not mean that you are using infinite resources。  

Instead; it means one reference is being set to another; as illustrated in Figure 4…13。 



    Variable montreal points to heap 

    memory that contains the data for 

                                              There is a reference in newyork to 

            the city Montreal 

                                                   montreal and vice versa 



               montreal                                                newyork 



  Public CityName As String                              Public CityName As String 

  Public X As Double                                     Public X As Double 

  Public Y As Double                                     Public Y As Double 

  Public Connections As Node()                           Public Connections As Node() 



                        newyork                                               montreal 



                    Array element is a reference to 

                        the other heap memory 



Figure 4…13。 Recursive assignment that seems like infinite resources 


…………………………………………………………Page 118……………………………………………………………

96        CH AP T E R   4   ■    L E A R N IN G   AB OU T   D AT A  S TR U CT U R E S;   DE CI SI ON S;   A N D   L O OP S 



                The apparent infinite resources are the cross…reference recursive assignment of two pieces  

           of heap memory。 It is fine to do this; and this ability is one of the reasons why people prefer  

           using reference types to value types。 



           Understanding Static Data Members and Methods 



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