Временные типы
 

Создает временную копию определенного пользователем типа

Синтаксис

result = Type( initializers, ... )
or
result = Type<typename>( initializers, ... )

Параметры

initializers
Исходные значения для типа
typename
Имя Type или Union

Возвращаемое значение

Временная копия типа.

Описание

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

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

Constructor для типа, если есть, будет вызываться, когда временная копия будет создана, а Destructor для типа, если есть, вызывается сразу после ее использования. Но когда есть конструктор, выражение временного типа может быть просто заменено typename( initializers, ... ).

Это получается короче в использовании, чем With (смотреть ниже) , если вы заменяете все поля.

Пример

Type Example
    As Integer field1
    As Integer field2
End Type

Dim ex As Example

'' Заполнение типа, устанавливая каждое поле
ex.field1 = 1
ex.field2 = 2

'' Заполнение типа, устанавливая каждое поле, и используя WITH
With ex
    .field1 = 1
    .field2 = 2
End With

'' Заполните полей переменной с помощью временного типа
ex = Type( 1, 2 )


'' Передача пользовательских типов в процедуру, с использованием временного типа,
'' где тип может быть выведен.

Type S
  As Single x, y
End Type

Sub test ( v As S )
  Print "S", v.x, v.y
End Sub

test( Type( 1, 2 ) )


'' Передача пользовательского типа в процедуру, используя временные типы,
'' где тип неоднозначен и имя типа должно быть указано.

Type S
  As Single x, y
End Type

Type T
  As Integer x, y
End Type

Union U
  As Integer x, y
End Union

'' Перегруженная процедура test()
Sub test Overload ( v As S )
  Print "S", v.x, v.y
End Sub

Sub test ( v As T )
  Print "T", v.x, v.y
End Sub

Sub test ( v As U )
  Print "U", v.x, v.y
End Sub

'' Не будет работать: неоднозначно
'' test( type( 1, 2 ) )

'' Вместо этого укажите имя типа так
test( Type<S>( 1, 2 ) )
test( Type<T>( 1, 2 ) )
test( Type<U>( 1 ) )


Отличия от QB

  • Новое в FreeBASIC

См. также