Программирование >>  Проектирование интерфейса пользователя 

1 ... 57 58 59 [ 60 ] 61 62 63 ... 153


Строки 1-3 листинга содержат объявление нового типа, ААА. Строка 2 тела объявления определяет целочисленную переменную-член Строки иллюстрируют использования созданного

типа: в строке 6 содержится объявление объекта А нового типа, а в строке 7 - оператор присваивания значения его члену (переменной Anlnt).

Обратите внимание на использование в строке 7 символа точки. Запись вида Имя-

трактуется компилятором следующим образом: Необходимо взять экземпляр ш1ляраТипа и обратиться к его член ена . Конструкцию Dim А As AAA называют объявлением экземпляра (объекта) тина или класса. Если представить человечество как класс , каждого из нас можно назвать экземпляром (или объектом ) этого класса.

Отдельный экземпляр созданного типа получает в свое распоряжение собственные копии переменных-членов типа. Тип можно воспринимать как оригинал, с которого

снимается необходимое число слепков. Поэтому при каждом объявлении экземпляра

пользовательского типа данных в памяти создается новый полный комплект переменных, служащих частью этого типа. Если строку 6 листинга i. i переписать, введя Dim A As ААА, В As ААА, это будет означать создание двух объектов типа ААА - А и В.

Присваивание переменной Anlnt объекта А значения 5 не оказывает никакого влияния на содержимое одноименной переменной объекта В.

Какие данные может содержать пользовательский тип

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

В пользовательский тип данных, однако, не могут включаться объекты, помеченные служебными словами Const, Static и Global, а также функции и подпрограммы. Напротив, последние могут быть членами классов VBA, хотя другие языки позволяют размещать определения функций даже в типах данных.


Некоторые языки программирования, например С, допускают определение функций в составе типов данных. Аналогом директивы Туре в языке С служит слов uct. Это полезно знать, поскольку сама операционная система Windows написана на языке С, а функции Windows Application Programming Interface (API) в состоянии существенно расширить возможности вашего VBA-кода. Многие из них предполагают наличие в прикладной программе определений соответствующих типов данных.

ЛистинМ 1.2 содержит примеры использования в составе создаваемого типа объявлений самых разных переменных и иллюстрирует приемы работы с ними. Точное количество и состав набора членов определяемого типа данных обусловливаются исключительно потребностями конкретной задачи.



Листинг.2. Пример использования сложного типа данных

2 3 4

7 8 5

10 11

12 13 14 15 16 17 18 19 20 21 22 23

Type LotsaData

AString As String Anint As Integer ADouble As Double SomeMone- As Currency

TheDate As Date TheTime As Date

TrrpleA As AAA

RecordSet As ADODB.Recordset

End Type

Su alize ( )

Dim Data As LotsaData

Data.AString = Что-то вот эдакое!

Data.Anint = 13

Data.ADouble = 34000000000000# Data.SomeMoney = 5000 MsgBox Data.SomeMoney Data.TheDate = Date Data.TheTime = Time Data.TripleA.Anint = 16 Set Data.RecordSet = Nothing End Sub

Строки листинга 11.2 содержат объявление типа данных, назван-

ного LotsaData. В строке 2 объявляется символьная переменная, в строке 3 - целочисленная, в строке 4 - двойной точности; строка 5 содержит определение члена типа Currency, строки 6 и 7 - переменные типа Date; в строке 8 объявляется экземпляр типа ААА, а строка 9 содержит объявление объекта стандартного класса ADODB. Recordset.

В строках 12-23, где находится код процедуры Initialize, создается объект типа LotsaData и выполняется инициализация его членов. После создания экземпляра типа (строка 13) разрешается ссылаться на его члены с помошью оператора точки (.). Чтобы получить доступ к членам вложенных объектов составных типов, достаточно перечислить цепочку имен, отделяя их символом точки (как сделано в строке 21). Конструкция Data.TripleA.Anint = 16 означает следдошее: присвоить литеральное значение 16 переменной Anint из состава такого объекта TripleA тина AAA, который, в свою очередь, служит членом экземпляра Data типа MoreComplexType .

Новый термин

Новый термин

Идиома в программировании - это способ выражения законченной мысли с помощью средств языка. Например, пользовательский тип данных - это идиома.

Класс - это тип данных, экземпляры которого могут не только что-то знать , но и уметь . Знание заключено в содержимом членов-объектов данных, а умение - в наборе членов-функций и процедур. Воспринимайте классы как результат развития концепции пользовательских типов, полученный за счет добавления в состав типа функций и процедур.



Новый термин

Объект - это экземпляр класса. (В ходе изложения мы иногда, отступая от канонов строгости, употребляем это слово также для ссылки на элементы данных других типов.)

Для обеспечения поддержки парадигмы объектно-ориентированного программирования в язык и среду VBA на протяжении нескольких последних лет были внесены существенные изменения. RecordSet, член типа MoreComplexType, определенного в тексте листинга 11.2, - это объект класса ADODB. Recordset. Разработчики языка

VBA и участники проекта по его модернизации, связанной с добавлением объектных

возможностей, решили ввести средства, позволяющие различать присваивание обычное и объектное. Вот почему в строке 22 используется служебное слово Set. Более подробные сведения о классах и их объектах приведены в главе 21-й час. Основы программирования классов .

Создание экземпляров пользовательских

типов данных

Объявления переменных (экземпляров) пользовательских типов данных подчиняются общим правилам. Такие конструкции могут находиться как внутри функций или подпрограмм, так и за их пределами. Помните: все переменные, объявленные в теле любой функции или процедуры, называются локальными, а за ее пределами - глобальными. Признак глобальности объекта можно явно подчеркнуть заданием служебного слова Global, а внутри функций (подпрограмм) допускается использовать квалификатор Static. Листинг 11.3 содержит ряд примеров объявления и применения локальных, глобальных и статических экземпляров пользовательских типов данных.

Листинг 11.3. Примеры использования локальных, глобальных и статических объектов данных

9 10: 11:

Type Typel

NoData As Integer

End Type

Di Tl As Typel Global T2 As Typel

Su peVars ( ) Dim T3 As Typel Static T4 As Typel End Sub

Анализ

В строках 1-3 листинга находится объявление типа Typel, содержащего один член - целочисленную переменную. В строке 5 создается экземпляр Tl нового типа; хотя объявление лишено явного указания служебного слова Global. Переменная трактуется компилятором как глобальная внутри текущего модуля, и к ней разрешается обращаться из любой строки этого модуля, хотя из других модулей, которые могут существовать в программе, она не видна . Уровень относительной доступности элементов данных, функций и процедур задается контекстом их определения. Строка 6 содержит явное объявление глобального экземп-



1 ... 57 58 59 [ 60 ] 61 62 63 ... 153

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика