Вы можете использовать коллекции с тем, чтобы группировать наборы связанных элементов, обычно - объектов, которые могут быть любого типа. Коллекции предоставляют механизм для работы с хранящимися в контейнерах объектами и включают в себя стандартные способы доступа и перебора объектов коллекции. Класс Collection функционирует как истинный контейнерный класс, хотя он и не включает себя метода AddObject, что используется в контейнерных классах типа Form и PageFrame.
Класс Collection представляет собой базовый класс, так что вы можете субклассировать его в программах (.prg) или файлах библиотек визуальных классов (.vcx).
Collection |
Примечания
При изменениях, происходящих в коллекции, позиция конкретного элемента может также изменяться.
Коллекции поддерживают перебор элементов, производимый с помощью команды FOREACH, основанный на позиции элемента в коллекции. Вы можете управлять позицией этих элементов, используя должным образом параметры eBeforeItem и eAfterItem, связанные с методом Add для объектов коллекции. Вы можете использовать индексное значение 1, или перечисление, основанное на индексе, начинающимся с 1, для ссылки на первый объект в коллекции, или вы можете использовать значение ключа, путем соответствующей установки значения свойства KeySort. Индексы коллекций основаны на начальном значении равным 1, в отличие от 0-based, принятых во многих других языках, для согласованности и совместимости с другими внутренними коллекциями Visual FoxPro.
Убедитесь в том, что либо все элементы в коллекции имеют ключи или ни один из них не имеет ключей (выделено переводчиком). Решение дилеммы - либо все элементы коллекции будут иметь ключи, либо ни один не будет иметь их, приведет к повышению эффективности поиска элементов, при использовании метода Item в отношении элементов коллекции и использования команды FOR EACH.
Вы можете использовать коллекцию в серверах Visual FoxPro Component Object Model (COM), для того, чтобы прочие COM серверы могли иметь к ним доступ.
Вы можете спрятать методы Add и Remove, применямые в отношении элементов объектов коллекций, от глобального использования, путем субклассирования объектов коллекций и маркировки субклассированных членов, как Hidden или Protected. Если вы выполните эту рекомендацию, то вы сможете добавлять членов коллекции в методе, ассоциированном с событием Init или через какие-то другие методы.
Элементы, введенные в коллекцию имеют ту же самую область видимости, как и прочие переменные памяти.
Поскольку объекты Collection поддерживают методы, определенные по умолчанию, например, Item (Collection Class), вам необходимо быть осведомленным о порядке поиска для этих методов. Метод объекта Collection имеет преимущество перед стандартными вызовами функций, определенных пользователем (UDF). Ниже приведено перечисление, показывающее порядок, в котором Visual FoxPro производит поиск для имени функции:
- Visual FoxPro native функции
- Метод объекта Collection, используемый по умолчанию
- UDF, определенная в файле локальной программы (.prg)
- UDF, определенная в файле вызывающей программы (.prg)
- Именованная программа в файле приложения (.app или .exe)
- Именованная программа, располагающая в списке поиска, определенном SET PATH
Когда Visual FoxPro избавляется от коллекции, содержащей объектные ссылки, он, кроме того, избавляется от любых объектов, имеющихся в коллекции, если они не имеют ссылок где-нибудь еще. Убедитесь, что удалили объекты и любые ссылки на эти объекты из коллекции, до того, как полностью удалить коллекции из памяти.
Visual FoxPro не поддерживает истинный тип безопасности. Поэтому для обеспечения безопасности при работе с коллекциями, вы должны обеспечить ее для класса.
Родные коллекции Visual FoxPro разработаны таким образом, чтобы метод Item сделал их доступным для размещения и исполнения пользовательского кода. Visual FoxPro Debugger не поддерживает оценки (вычисления) для членов объекта, которые внедрены, как вызовы методов. Поэтому, вы не сможете вычислять какие-либо значения для элементов коллекции.
![]() |
---|
Для помощи в отладке коллекций, вы можете написать код, подобный коду в приведенных ниже примерах, который добавляет в качестве члена коллекции массив, названный "Items", для ссылки на каждый элемент коллекции: |
![]() | |
---|---|
LOCAL oCol AS Collection |
Пример
В run time, приведенный ниже пример создает формы и коллекцию, добавляет формы в коллекцию, используя метод Add объекта класса Collection, отображает имя каждой формы в коллекции, и отображает число форм в коллекции:
![]() | |
---|---|
loForm1 = CREATEOBJECT("Form") |
Следующий пример определяет класс Form, который добавляет в форму текст-боксы, объекты командных кнопок и коллекцию. Класс коллекции, будучи добавленный в форму в run time, добавляет в себя все объекты, имеющиеся на форме. Пример затем проходит по коллекции, устанавливая позиции элементов формы и печатает их имена на экране.
![]() | |
---|---|
LOCAL loForm, loItem, lnTop |
Для просмотра других примеров, использующих методы Add, Remove и Item класса Collection, смотри статьи Add Method (Collection Class), Remove Method (Collection Class), и Item Method (Collection Class).
Смотрите также
Прочие ресурсы
Объекты, коллекции и классыСвойства, методы и события объекта Collection
Команда FOR EACH ... ENDFOR
Автоматизация и COM сервера