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

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

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






Thus; some code that iterates the array will need to verify that the array element is not Nothing。  

The sample code generates the structure illustrated in Figure 8…2。 



Figure 8…2。 Array structure of referenced elements 



     Figure 8…2 reveals a very important aspect of reference types: an array holds a reference to  

the object and not the value of the object。 If the array were value types; then the entire value  

would be stored in the array。 

     The array could just as easily have been some object with a number of variables; like this: 



Class MyTypeArray 

    Public Element1 As MyType 

    Public Element2 As MyType 

。 。 。 

End Class 



     Since array elements are a bunch of references stored in a type; you could make use of this  

knowledge to create a type that serves no other purpose than referencing a list of elements;  

more monly called a linked list。 

     In a linked list; the individual objects are linked together and reference another element  

nearby。 A doubly linked list will only ever hold references to two other objects: the next one and  

the previous one。 (Another type is a singly linked list; which holds a reference to only one other  

object: the next one。) 

     In a doubly linked list; the type will have data members named NextItem and  PrevItem。  

Each of these data members is used to reference another element in the list; as illustrated in  

Figure 8…3。 To iterate a list; you start from either the left or right side and then go to the NextItem  

or PrevItem data members; respectively。 Here is an example: 



Dim curr As MyType = GetHeadOfList() 

Do While (curr IsNot Nothing) 

    ' Do something with curr 

    curr = curr。NextItem 

Loop 


…………………………………………………………Page 228……………………………………………………………

206       CH AP T E R   8   ■    L E A R N IN G   AB OU T   CO M P O N E N TO R IE N T E D  AR C HI TE CT U R E 



           Figure 8…3。 Structure of doubly linked list 



                As you can see; you can easily add elements to linked lists。 The drawback is that it is expensive  

           to find a particular object; as that requires iterating through the list。  



           ■Note  For the most part; you will be using the standard  List class; but there is also a  LinkedList  

           class。 If you’re interested; you can find information about the  version of System。Collection。 

           Generics。LinkedList in the MSDN documentation。 We’ll make our own linked list to demonstrate Visual  

           Basic programming techniques; but you should use the standard collection classes in almost every case。 



                For our application’s kernel; we’ll use a doubly linked list to link together a number of  

           rooms into a set of groupings。  



           Creating a Linked List 



           The initial structure of the BaseLinkedListItem class is as follows (defined in  LibLightingSystem): 



               Public MustInherit Class BaseLinkedListItem  

                   Private _next As BaseLinkedListItem 

                   Private _prev As BaseLinkedListItem 



                   Public ReadOnly Property NextItem() As BaseLinkedListItem 

                       Get  

                           Return _next 

                       End Get 

                   End Property 

                   Public ReadOnly Property PrevItem() As BaseLinkedListItem 

                       Get  

                           Return _prev 

                       End Get 

                   End Property 

               End Class 



                BaseLinkedListItem is declared as MustInherit to indicate that using this class implies that  

           you must derive a class。  PrevItem and NextItem are Visual Basic properties that can only read  

           the values of the private data members of _prev and _next。 


…………………………………………………………Page 229……………………………………………………………

                             C H AP TE R   8   ■    L E AR N IN G   AB O U T   CO M P O N E N T O R IE N TE D   A R CH I TE C TU R E 207 



Inserting and Removing Linked List Items 



Inserting an object into a linked list or removing an object from a linked list requires some  

careful coding。 You need to make sure that the actions will not corrupt the list。 This is not a task  

that you want to delegate to the users of the linked list; as they could unintentionally corrupt  

the list。 The following is the code to insert and remove an object from a linked list; and is part  

of the BaseLinkedListItem class。 



        Public Sub Insert(ByVal item As BaseLinkedListItem)  

            item。_next = _next 

            item。_prev = Me 



            If _next IsNot Nothing Then 

                _next。_prev = item 

            End If 

            _next = item 

        End Sub 



        Public Sub Remove()  

            If _next IsNot Nothing Then 

                _next。_prev = _prev 

            End If 

            If _prev IsNot Nothing 

                _prev。_next = _next 

            End If 

            _next = Nothing 

            _prev = Nothing 

        End Sub 



     The Insert() method assumes that you want to insert an object into the head of a list; which  

has at least one element。 The Insert() method assumes the following code at a minimum。 



Dim singleElement As BaseLinkedListItem = GetHeadOfList() 

Dim anotherElement as BaseLinkedListItem = CreateListElement() 

singleElement。Insert(anotherElement) 



     The first step is to assign the data members (_next; _prev) of the object ( item) that is going  

to be added to the list。 



■Note  Notice how in the Insert() method; it is possible to assign the private data members of another  

object instance。 You learned that private scope means that only the declared type can read private properties  

and methods。 This rule has not been violated; because the rule implies types can read the private data members  

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