Referenz - WITH
Syntax:
WITH UDT_Name
[Ausdruck_mit_Attribut1]
[Ausdruck_mit_Attribut2]
[...]
END WITH
Typ: Anweisung
Kategorie: Klassen
WITH erlaubt es, auf die Attribute und Methoden eines UDTs (TYPE oder UNION) zuzugreifen, ohne den Namen des UDTs mit angeben zu müssen. Den Elementen muss stattdessen nur ein Punkt vorangestellt werden.
'UDT_Name' ist der Name des UDTs, auf das zugegriffen werden soll. Es kann sich auch um einen dereferenzierten Pointer handeln.
Beispiel 1:
TYPE AdrType
Empf AS STRING
City AS STRING
PLZ AS INTEGER
END TYPE
DIM Adressen(10) AS AdrType
WITH Adressen(0)
.PLZ = 98765
.Empf = "Karl Mustermann"
END WITH
Innerhalb eines WITH-Blocks können beliebige Anweisungen stehen. Der Block dient lediglich dazu, die Schreibarbeit beim Zugriff auf die UDT-Member zu vereinfachen. Auch der Zugriff auf andere UDTs als den im WITH-Block festgelegten ist möglich.
Beispiel 2:
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. Elemente, die in der abgekürzten Form verwendet werden, beziehen sich immer auf den UDT, der im innersten WITH-Block angegeben wird.
Beispiel 3:
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
Beispiel 4: 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 zu QB: neu in FreeBASIC
Unterschiede zu früheren Versionen von FreeBASIC:
Seit FreeBASIC v1.01 erzeugt WIDTH...END WITH einen impliziten SCOPE-Block.
Unterschiede unter den FB-Dialektformen:
In der Dialektform -lang qb steht WITH nicht zur Verfügung und kann nur über __WITH aufgerufen werden.
Siehe auch:
TYPE, UNION, DIM, Objektorientierung
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|