WITH

FreeBASIC-Referenz » Alphabetische Befehlsreferenz » W » WITH

Syntax:

WITH UDT_Name
  [Ausdruck_mit_Record1]
  [Ausdruck_mit_Record2]
  [...]
END WITH

Typ: Anweisung
Kategorie: Klassen

WITH erlaubt es, auf die Records 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:

Unterschiede zu QB: neu in FreeBASIC

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