Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Referenz - WITH

Referenz-Navigation

 

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 (BefehlsreferenzeintragTYPE oder BefehlsreferenzeintragUNION) 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 BefehlsreferenzeintragPointer 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 zu früheren Versionen von FreeBASIC:
Seit FreeBASIC v1.01 erzeugt WIDTH...END WITH einen impliziten BefehlsreferenzeintragSCOPE-Block.

Unterschiede unter den FB-Dialektformen:
In der Dialektform Befehlsreferenzeintrag-lang qb steht WITH nicht zur Verfügung und kann nur über __WITH aufgerufen werden.

Siehe auch:
BefehlsreferenzeintragTYPE, BefehlsreferenzeintragUNION, BefehlsreferenzeintragDIM, BefehlsreferenzeintragObjektorientierung


Zusätzliche Informationen und Funktionen
  • Der Referenzeintrag wurde am 26.06.2007 von RedakteurMao angelegt.
  • Die aktuellste Version wurde am 05.08.2020 von Redakteurnemored gespeichert.
  Versionen Versionen