Создает временную копию определенного пользователем типа
Синтаксис
result = Type( initializers, ... )
or
result = Type<typename>( initializers, ... )
Параметры
initializers
Исходные значения для типа
typename
Возвращаемое значение
Временная копия типа.
Описание
Используется для создания временного типа. Если
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
См. также