Декларирует пользовательский определяемый тип
Union (объединение
).
Синтаксис
Параметры
typename
Имя Union
fieldname
Имя пользовательского поля данных
member function declaration
Любая из поддерживаемых функций-элементов
Описание
Union(ы) аналогичны структуре
Type, за
исключением того, что элементы
Union занимают одно
и то же пространство в памяти (но в отличие от Type, Union не может
содержать строки переменной длины, и в целом поля с конструкторами и
деструкторами). Размером
Union является размер
самого большого элемента данных. Элементом данных может быть неназванный
Type.
Так как они занимают одно и тоже пространство, только один элемент может
быть использован.
Union(ы
) поддерживают
функции-элементы в том числе
Constructor,
Destructor,
Function,
Operator,
Property
и
Sub. Все элементы
Union являются
Public и
контроль доступа не поддерживается.
Безымянные
Type , вложенные в U
nion
не могут иметь функций-элементов.
Union может быть передан как определяемый пользователем тип
в перегруженные функции операторов.
Пример
' Пример 1: битовые поля.
Type unitType
Union
Dim attributeMask As UInteger
Type ' 32-битные
uintegers могут поддерживать до 32 атрибутов.
isMilitary : 1 As UInteger
isMerchant : 1 As UInteger
End Type
End Union
End Type
Dim myunit As unitType
myunit.isMilitary = 1
myunit.isMerchant = 1
Print myunit.isMilitary ' Результат: 1.
Print myunit.isMerchant ' Результат: 1.
Print myunit.attributeMask ' Результат: 3.
Sleep
' Пример 2.
' Определить наш union.
Union AUnion
a As UByte
b As Integer
End Union
' Определение составного типа.
Type CompType
s As String * 20
ui As Byte 'Флаг
, говорящий нам, что использовать в Union.
Union
au As UByte
bu As Integer
End Union
End Type
' Флаги, дающие нам понять,
что использовать в Union.
' Вы можете использовать только один элемент
Union.
Const IsInteger = 1
Const IsUByte = 2
Dim MyUnion As AUnion
Dim MyComposite As CompType
' Можно установить только одно значение в
Union.
MyUnion.a = 128
MyComposite.s = "Type + Union"
MyComposite.ui = IsInteger ' Говорит
нам, что это Integer Union.
MyComposite.bu = 1500
Print "Union: ";MyUnion.a
Print "Composite: ";
If MyComposite.ui = IsInteger Then
Print MyComposite.bu
ElseIf MyComposite.ui = IsUByte Then
Print MyComposite.au
Else
Print "Unknown type."
End If
Sleep
Различия диалектов
- Объектные особенности, определенные внутри блока Union
, поддерживаются только в диалекте -lang fb.
- Не доступно в диалекте -lang qb ,
но есть псевдоним __Union.
Отличия от QB
См. также