Typ: Anweisung
Kategorie: Verschiedenes
Syntax:
WITH UDT_Name
[Ausdruck_mit_'.Record1'
[Ausdruck_mit_'.Record2']
[...]
END WITH
Innerhalb eines WITH-Blocks müssen nur die Namen der Records eines UDTs angegeben werden, nicht aber der UDT-Bezeichner selbst. Dies erspart dem Programmierer einige Tipparbeit.
UNION wird ebenfalls unterstützt. 'UDT_Name' kann auch ein dereferenzierter Pointer sein.
Beispiel:
TYPE AdrType
Name AS STRING
City AS STRING
PLZ AS INTEGER
END TYPE
DIM Adressen(10) AS AdrType
WITH Adressen(0)
.PLZ = 98765
.Name = "Karl Mustermann"
END WITH
Innerhalb eines WITH-Blocks müssen keine festen Reihenfolgen eingehalten werden. Es ist auch möglich, innerhalb eines WITH-Blocks andere Anweisungen zu benutzen. Der Zugriff auf andere UDTs als dem zuerst genannten ist ebenfalls möglich:
TYPE MyType
MyStr AS STRING
MyInt AS INTEGER
MyPtr AS INTEGER PTR
END TYPE
TYPE OtherType
OthStr AS STRING
OthArr(20) AS INTEGER
END TYPE
DIM Anything(10) AS MyType
DIM AnythingElse AS OtherType
WITH Anything(5)
FOR i = 0 TO 10
.MyStr = STR(AnythingElse.OthArr(i))
PRINT .MyStr
PRINT @.MyPtr
NEXT
END WITH
WITH-Blöcke dürfen auch verschachtelt sein:
TYPE MyType
MyStr AS STRING
MyInt AS INTEGER
MyPtr AS INTEGER PTR
END TYPE
TYPE OtherType
OthStr AS STRING
OthArr(20) AS INTEGER
OthUdt As MyType
END TYPE
DIM Anything(10) AS MyType
DIM AnythingElse AS OtherType
WITH AnythingElse
.OthStr = "hello"
.OthArr(5) = 7
WITH .OthUdt
.MyStr = "world"
.MyInt = 8
.MyPtr = @.MyInt
END WITH
END WITH
Ein WITH-Block mit einem dereferenzierten Pointer als Argument:
TYPE SubType
d AS INTEGER
e AS INTEGER
f AS INTEGER
End Type
TYPE MainType
a AS INTEGER
b AS INTEGER
c AS SubType
End Type
DIM x AS MainType PTR
x = CALLOCATE(LEN(MainType))
WITH x->c
.d = 5
.e = 6
.f = 7
PRINT .d
PRINT .e
PRINT .f
END WITH
SLEEP
Hinweise:
- WITH funktioniert (noch) nicht mit NAMESPACE
- Aufgrund der inneren Struktur sollte nicht mit GOTO in einen WITH-Block gesprungen werden
Unterschiede in den Dialektformen:
- unter -lang qb ist WITH nur als __WITH verfügbar
Unterschiede zu QuickBASIC:
- Neu in FreeBASIC
Siehe auch:
TYPE, UNION, DIM