Union
 
Декларирует пользовательский определяемый тип Union (объединение).

Синтаксис

Union typename
fieldname as datatype
Declare member function declaration ...
...
End Union

Параметры

typename
Имя Union
fieldname
Имя пользовательского поля данных
member function declaration
Любая из поддерживаемых функций-элементов

Описание

Union(ы) аналогичны структуре Type, за исключением того, что элементы Union занимают одно и то же пространство в памяти (но в отличие от Type, Union не может содержать строки переменной длины, и в целом поля с конструкторами и деструкторами). Размером Union является размер самого большого элемента данных. Элементом данных может быть неназванный Type. Так как они занимают одно и тоже пространство, только один элемент может быть использован.

Union(ы) поддерживают функции-элементы в том числе Constructor, Destructor, Function, Operator, Property и Sub. Все элементы Union являются Public и контроль доступа не поддерживается.

Безымянные Type , вложенные в Union не могут иметь функций-элементов.

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

  • Новое в FreeBASIC

См. также