Шаг 26 - Коллекция объектов

В любом случае Ваши объекты подчинены некоторой иерархии. Например, у вас может быть много объектов автомобилей, которые находятся в гараже.

gif/26_1.gif (573 b)

Так же в приложении Excel, есть много листов, в базе данных много таблиц. В общем можно сказать, что у нас могут быть наборы объектов с одинаковой функциональностью. Объекты, которые содержат в себе однотипные объекты назваются коллекциями (Collection). В данном случае можно сказать, что гараж - это коллекция. Создавать коллекцию удобно используя ClassWizard. В нем есть специальная кнопка для реализации данной возможности.

gif/26_2.gif (3251 b)

Давайте создадим новый проект ActiveX DLL вот с такой структурой:

gif/26_3.gif (1175 b)

И вызовем Class Builder, нажав на кнопку AddNewCollection. Здесь нам нужно будет указать имя коллекции и класс, который будет в эту коллекцию входить.

gif/26_4.gif (5470 b)

После нажатия на OK вы увидите изменения в окне Class Builder.

gif/26_5.gif (2862 b)

После обновления проекта Class Builder сформирует весь необходимый код в новом классе коллекции.

gif/26_6.gif (1523 b)

'local variable to hold collection
Private mCol As Collection

Public Function Add(Optional sKey As String) As ClassAuto
    'create a new object
    Dim objNewMember As ClassAuto
    Set objNewMember = New ClassAuto

    'set the properties passed into the method
    If Len(sKey) = 0 Then
        mCol.Add objNewMember
    Else
        mCol.Add objNewMember, sKey
    End If

    'return the object created
    Set Add = objNewMember
    Set objNewMember = Nothing
End Function

Public Property Get Item(vntIndexKey As Variant) As ClassAuto
    'used when referencing an element in the collection
    'vntIndexKey contains either the Index or Key to the collection,
    'this is why it is declared as a Variant
    'Syntax: Set foo = x.Item(xyz) or Set foo = x.Item(5)
  Set Item = mCol(vntIndexKey)
End Property

Public Property Get Count() As Long
    'used when retrieving the number of elements in the
    'collection. Syntax: Debug.Print x.Count
    Count = mCol.Count
End Property

Public Sub Remove(vntIndexKey As Variant)
    'used when removing an element from the collection
    'vntIndexKey contains either the Index or Key, which is why
    'it is declared as a Variant
    'Syntax: x.Remove(xyz)
    mCol.Remove vntIndexKey
End Sub

Public Property Get NewEnum() As IUnknown
    'this property allows you to enumerate
    'this collection with the For...Each syntax
    Set NewEnum = mCol.[_NewEnum]
End Property

Private Sub Class_Initialize()
    'creates the collection when this class is created
    Set mCol = New Collection
End Sub

Private Sub Class_Terminate()
    'destroys collection when this class is terminated
    Set mCol = Nothing
End Sub

Обратите внимание, что была создана внутренняя переменная типа Collection и функция для доступа к ней. Естественно, что все это можно было написать и руками, но все же.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 30.08.2001