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


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
小说推荐
返回首页返回目录