With
 
Блок операторов, разрешающий неявный доступ к полям в пользовательcком определяемом типе переменной

Синтаксис

With user_defined_var
statements
End With

Описание

Блок With...End With позволяет не указывать имя переменной определяемого Type при ссылке на поля. Доступ к полям можно получить с помощью точки (.) перед ними, например если Type содержит элемент поля, называемый "element", тогда он может быть доступен в блоке With как ".element".

Он может быть использован как сокращение для ввода, не загромождая исходник. With также может быть использован с разыменованными указателями, как во втором примере.

Блоки With могут быть вложенными. В этом случае только самый внутренний блок With активен , а любые наружные игнорируются, пока внутренний не будет закрыт. Смотрите третий пример для иллюстрации этого.

Внутренне, ссылка на переменную берется в начале блока With, а затем используется, чтобы вычислить обращение к любому элементу в блоке. Заметим, что это означает, что Goto не должна использоваться, чтобы перейти в блоке With, в противном случае ссылка не будет установлена, а результат попытки получить к нему доступ будет неопределенным.

Примечание для блока With, используемого внутри процедуры-элемента:
Чтобы получить доступ к дублированным символам, определенным вне Типа использования "..SomeSymbol".


Пример

Type rect_type
    x As Single
    y As Single
End Type

Dim the_rectangle As rect_type
Dim As Integer temp, t

With the_rectangle
    temp = .x
    .x = 234 * t + 48 + .y
    .y = 321 * t + 2
End With


Type rect_type
    x As Single
    y As Single
End Type

Dim the_rectangle As rect_type Ptr

the_rectangle = CAllocate( 5 * Len( rect_type ) )

Dim As Integer loopvar, temp, t

For loopvar = 0 To 4

  With the_rectangle[loopvar]

    temp = .x
    .x = 234 * t + 48 + .y
    .y = 321 * t + 2

  End With

Next


Type rect_type
    x As Single
    y As Single
End Type

Dim As rect_type rect1, rect2

'' Вложенные блоки With
With rect1

    .x = 1
    .y = 2

    With rect2

        .x = 3
        .y = 4

    End With

End With

Print rect1.x, rect1.y '' 1,  2
Print rect2.x, rect2.y '' 3,  4


Отличия диалектов

  • Нет в наличии в диалекте -lang qb , но есть псевдоним  __With.

Отличия от QB

  • Новое в FreeBASIC

См. также