Блок операторов, разрешающий неявный доступ к полям в пользователь
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
См. также