Используются на уровне модуля для задания типа данных, используемого по умолчанию для переменных, аргументов, передаваемых в процедуры, и значений, возвращаемых процедурами Function и Property Get, имена которых начинаются с соответствующих символов.
DefBool диапазонБукв[, диапазонБукв] . . . DefByte диапазонБукв[, диапазонБукв] . . . DefInt диапазонБукв[, диапазонБукв] . . . DefLng диапазонБукв[, диапазонБукв] . . . DefCur диапазонБукв[, диапазонБукв] . . . DefSng диапазонБукв[, диапазонБукв] . . . DefDbl диапазонБукв[, диапазонБукв] . . . DefDec диапазонБукв[, диапазонБукв] . . . DefDate диапазонБукв[, диапазонБукв] . . . DefStr диапазонБукв[, диапазонБукв] . . . DefObj диапазонБукв[, диапазонБукв] . . . DefVar диапазонБукв[, диапазонБукв] . . .
Параметры
диапазонБукв
Обязательный аргумент диапазонБукв имеет следующий синтаксис:
буква_1[-буква_2]
Аргументы буква_1 и буква_2 указывают диапазон имен, для которых задается тип данных по умолчанию. Каждый аргумент представляет первую букву имени переменной, аргумента, процедуры Function или Property Get и может быть любой буквой алфавита. Регистр символов в аргументе диапазонБукв не существенен.
Замечания
Имя инструкции определяет тип данных:
DefBool Boolean DefByte Byte DefInt Integer DefLng Long DefCur Currency DefSng Single DefDbl Double DefDec Decimal (в настоящее время не поддерживается) DefDate Date DefStr String DefObj Object DefVar Variant
Например, в следующем фрагменте программы ,b>Message представляет собой строковую переменную:
DefStr A-Q . . . Message = "Переполнение стека."
Инструкция DefТип действует только на модуль, в котором она используется. Например, инструкция DefInt в одном модуле действует только на типы данных по умолчанию для переменных, передаваемых в процедуры аргументов, и возвращаемых типов процедур Function и Property Get, описанных в данном модуле. Типы данных по умолчанию для переменных, передаваемых в процедуры аргументов, и возвращаемых типов данных в других модулях остаются без изменений. Если тип данных не описан явно с помощью инструкции DefТип, то для всех переменных, аргументов, процедур Function и Property Get по умолчанию используется тип данных Variant.
При указании диапазона букв обычно определяется тип данных по умолчанию для переменных, которые начинаются с первых 128 символов набора. Однако при указании диапазона A – Z задается тип данных по умолчанию для всех переменных, включая те, что начинаются с международных символов из расширенной части набора (128 – 255).
После указания диапазона A – Z имеется возможность переопределять с помощью инструкций DefТип подчиненные диапазоны переменных. Если после задания диапазона включить ранее определенную букву в другую инструкцию DefТип, возникает ошибка. Однако возможно явное указание типа данных любой определенной или не определенной ранее переменной с помощью инструкции Dim с предложением As тип. Например, имеется возможность использовать следующую программу на уровне модуля для определения переменной с типом Double, хотя был задан тип данных по умолчанию Integer:
DefInt A-Z Dim TaxRate As Double
Инструкции DefТип не действуют на элементы определяемых пользователем типов, поскольку эти элементы должны быть описаны явно.
Пример
В данном примере инструкции Defтип используются для задания по умолчанию типов данных для переменных и процедур Function, имена которых начинаются с указанных символов. Используемый по умолчанию тип данных может быть изменен только явным присвоением с использованием инструкции Dim. Инструкции Defтип можно использовать только на уровне модуля (т.е. нельзя использовать внутри процедур.
' Переменные, имена которых начинаются с букв "A" - "K", ' будут по умолчанию Integer. DefInt A-K ' Переменные, имена которых начинаются с букв "L" - "Z", ' будут по умолчанию String. DefStr L-Z CalcVar = 4 ' Инициализирует переменную типа Integer. StringVar = "Всем привет" ' Инициализирует переменную типа String. AnyVar = "Привет" ' Будет обнаружено несовпадение типов. Dim Calc As Double ' Явно объявлена переменная типа Double. Calc = 2.3455 ' Присваивает значение переменной типа Double. ' Инструкции Defтип также применимы к функциям. CalcNum = ATestFunction(4) ' Вызывает процедуру Function, определенную пользователем. ' Описание процедуры Function ATestFunction. Function ATestFunction(INumber) ATestFunction = INumber * 2 ' Возвращает значение типа Integer. End Function