Buchempfehlung
Windows System Programming
Windows System Programming
Das Kompendium liefert viele interessante Informationen zur Windows-Programmierung auf Englisch. [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 - STATIC (Anweisung)

Referenz-Navigation

 

Syntax A: STATIC Variable AS Typ [= einfacherAusdruck] [, Variable AS Typ [= einfacherAusdruck] [, ...] ]
Syntax B: STATIC AS Typ Variable [= einfacherAusdruck] [, Variable [= einfacherAusdruck] [, ...] ]
Syntax C: STATIC Array([Start TO] Ende [, [Start TO] Ende] [, ...]) AS Typ [= {Ausdruck [, ... ] }]
Typ: Anweisung
Kategorie: Deklaration

STATIC deklariert Variablen oder Arrays einer lokalen BefehlsreferenzeintragProzedur und speichert sie, wenn die Prozedur beendet wird, sodass ihr Wert beim nächsten Aufruf der Prozedur wieder verfügbar ist. Die Anweisung arbeitet damit ähnlich wie BefehlsreferenzeintragDIM, nur dass der Wert für den nächsten Prozeduraufruf erhalten bleibt.

Beispiel 1:

DECLARE SUB zaehl

zaehl
zaehl
SLEEP

SUB zaehl
  STATIC i AS INTEGER
  i += 1
  PRINT "Dies ist der " & i & ". Aufruf."
END SUB

Ausgabe:

Dies ist der 1. Aufruf.
Dies ist der 2. Aufruf.

STATIC kann auch den Wert einer Variable initialisieren. In diesem Fall wird die Wertzuweisung des Initiators nur beim ersten Aufruf der Prozedur vorgenommen. Bei späteren Aufrufen wird mit dem gespeicherten Wert weitergearbeitet.

Beispiel 2:

FUNCTION produkt (param AS INTEGER) AS INTEGER
  STATIC wert AS INTEGER = 1

  wert *= param
  RETURN wert
END FUNCTION

PRINT produkt(3)
PRINT produkt(4)
PRINT produkt(5)
SLEEP

Ausgabe:

 3
 12
 60

STATIC kann auch in BefehlsreferenzeintragUDTs verwendet werden, wodurch sich alle Instanzen der Klasse den Wert teilen. Die Variable verhält sich also, als ob sie BefehlsreferenzeintragSHARED wäre, allerdings nur für die Objekte der Klasse selbst.
Eine statische Variable in einer Klasse muss auch einmalig außerhalb der Klasse deklariert werden. Siehe dazu folgendes Beispiel:

Beispiel 3:

Type Teil
  Private:
  Static As Integer anzahl
  Dim As String teileName

  Public:
  Declare Constructor (bezeichnung As String)
  Declare Function wieviele As Integer
End Type

Dim As Integer Teil.anzahl = 0

Constructor Teil (bezeichnung As String)
  This.anzahl += 1
  This.teileName = bezeichnung
End Constructor

Function Teil.wieviele As Integer
  Return This.anzahl
End Function

Dim As Teil teil1 = Teil("Schraube")
Print "Teileanzahl: " & teil1.wieviele

Dim As Teil teil2 = Teil("Mutter")
Print "Teileanzahl: " & teil2.wieviele

Sleep

Auf eine statische Variable innerhalb einer Klasse kann auch ohne eine direkte Instanz zugegriffen werden, indem man sich einfach auf die Klasse bezieht. Im oberen Beispiel kann also auch außerhalb der Klasse stets auf 'Teil.anzahl' zugegriffen werden.

Da sich eine statische Variable wie SHARED verhält, ist dies zurzeit auch die einzige Möglichkeit, ein dynamisches Array innerhalb eines UDTs zu erstellen:

Type Udt
    'Dim As Integer dynamicArrayDim() <- Dynamische Arrays in UDTs sind nicht erlaubt
    Static As Integer dynamicArrayStatic() '<- Durch Static aber möglich

    Dim As Integer dummy
End Type

Dim As Integer Udt.dynamicArrayStatic()

Print LBound(Udt.dynamicArrayStatic), UBound(Udt.dynamicArrayStatic)

ReDim Udt.dynamicArrayStatic(0 To 5)
Print LBound(Udt.dynamicArrayStatic), UBound(Udt.dynamicArrayStatic)

Sleep

Diese Methode eignet sich aber nur bedingt für den Produktiveinsatz, da sich alle Instanzen der Klasse die deklarierten statischen dynamischen Arrays teilen müssen.

Unterschiede zu QB:
In QB kann STATIC nur in Prozeduren und innerhalb DEF FN verwendet werden.

Unterschiede zu früheren Versionen von FreeBASIC:

Siehe auch:
BefehlsreferenzeintragSTATIC (Klausel), BefehlsreferenzeintragSTATIC (Meta), BefehlsreferenzeintragSTATIC (Schlüsselwort), BefehlsreferenzeintragSTATIC (UDT), BefehlsreferenzeintragDIM, BefehlsreferenzeintragSHARED, BefehlsreferenzeintragDatentypen und Deklarationen


Zusätzliche Informationen und Funktionen
  • Der Referenzeintrag wurde am 03.08.2007 von Redakteurnemored angelegt.
  • Die aktuellste Version wurde am 14.12.2013 von RedakteurMOD gespeichert.
  Versionen Versionen