Основы офисного программирования и язык VBA


Создание собственных динамических классов - часть 2


Приведем теперь описание свойств и методов этого класса:

Option Explicit 'Определение класса СписокЛичностей 'Свойства Private First As ЭлементСпискаЛичностей Private Last As ЭлементСпискаЛичностей Public Count As Integer 'Методы Private Sub Class_Initialize() Set First = Nothing Set Last = Nothing Count = 0 End Sub

Public Sub AddFirst(F As Личность) Dim Elem As New ЭлементСпискаЛичностей Dim Info As New Личность 'Создаем копию переменной F. В списке будем использовать копию, а не ссылку. Info.CopyPerson F Set Elem.Сам = Info Set Elem.Друг = First If First Is Nothing Then Set Last = Elem End If Set First = Elem Count = Count + 1 End Sub

Public Sub PrintList() Dim P As ЭлементСпискаЛичностей Dim Q As Личность Set P = First While Not (P Is Nothing) Set Q = P.Сам Q.PrintPerson Set P = P.Друг Wend End Sub

Public Sub AddLast(F As Личность) Dim Elem As New ЭлементСпискаЛичностей Dim Info As New Личность 'Создаем копию переменной F. В списке будем использовать копию, а не ссылку. Info.CopyPerson F Set Elem.Сам = Info Set Elem.Друг = Nothing If First Is Nothing Then Set First = Elem Else Set Last.Друг = Elem End If Set Last = Elem Count = Count + 1 End Sub

Public Sub ClearList() 'Попытка освободить память не достигает успеха из-за отсутствия 'соответствующего оператора. Dim P As ЭлементСпискаЛичностей, R As ЭлементСпискаЛичностей Dim Q As Личность Set P = First While Not (P Is Nothing) Set Q = P.Сам 'Unload Q Set R = P Set P = P.Друг 'Unload R Wend 'Обнуление указателей Set First = Nothing Set Last = Nothing Count = 0 End Sub

Пример 5.10.

Теперь несколько замечаний по поводу реализации методов:

  1. При добавлении нового элемента в методах AddFirst и AddLast вначале создается новый пустой элемент списка; поскольку в объявлении элемента используется спецификатор New. Создается также новый элемент для информационного поля, куда копируется информация, переданная при вызове методов Add, - здесь пригодился метод CopyPerson класса Личность. Заметьте, что в отличие от класса Collection, создается копия элемента, а не используется ссылка.


    Начало  Назад  Вперед



    Книжный магазин