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 (UDT)

Referenz-Navigation

 

Syntax:

Type typename
  Declare Static Function functionname ...
  Declare Static Sub subname ...
  Declare Static Operator New[] ...
  Declare Static Operator Delete[] ...
End Type

Typ: Klausel
Kategorie: Klassen

STATIC wird verwendet, um Methoden zu deklarieren, denen beim Aufruf keine implizite Instanz des BefehlsreferenzeintragUDTs mitgegeben werden soll. Dadurch kann diese statische Methode auch aufgerufen werden, ohne dass eine Instanz des UDTs existieren muss.

Beim Aufruf einer Methode (also einer innerhalb des UDTs deklarierten BefehlsreferenzeintragSUBs oder BefehlsreferenzeintragFUNCTION) wird für gewöhnlich implizit eine Instanz der zugehörigen UDT-Variablen mitgeben. Diese kann dann innerhalb der Methode mit BefehlsreferenzeintragTHIS angesprochen werden. Dadurch ist ein Zugriff auf die Attribute des UDTs möglich. Bei der Deklaration einer 'static', also einer statischen Prozedur wird dagegen intern keine implizite Instanz des Objekts an die Prozedur übergeben, sodass nur Zugriff auf übergebene Parameter besteht.

Statische Memberprozeduren können nur auf andere statische Member (Attribute und Methoden) des UDTs zugreifen, nicht aber auf normale Member. Um dies doch zu tun, muss ein BefehlsreferenzeintragObjekt-Pointer als zusätzlicher Parameter übergeben werden. Außerhalb des UDTs kann eine statische Memberprozedur wie eine nicht statische verwendet werden. Die Adresse einer statischen Memberfunktion kann wie gewohnt mit Hilfe von BefehlsreferenzeintragPROCPTR oder dem Befehlsreferenzeintrag@-Operator einem Function-Pointer zugewiesen werden.

STATIC funktioniert nur mit BefehlsreferenzeintragSUB, BefehlsreferenzeintragFUNCTION und den BefehlsreferenzeintragOperatoren BefehlsreferenzeintragNEW[] und BefehlsreferenzeintragDELETE[].

Beispiel:

'Ein Beispiel, wie man während der Laufzeit einen Pointer auf eine Prozedur innerhalb eines UDTs setzt
Type myType

  Enum handlertype
    ht_default
    ht_A
    ht_B
  End Enum

  Declare Constructor (ByVal ht As handlertype = ht_default)

  Declare Sub handler

Private:
  Declare Static Sub handler_default (ByRef obj As myType)
  Declare Static Sub handler_A (ByRef obj As myType)
  Declare Static Sub handler_B (ByRef obj As myType)
  handler_func As Sub (ByRef obj As myType)

End Type

Constructor myType (ByVal ht As handlertype)
  Select Case ht
  Case ht_A
    handler_func = @myType.handler_A
  Case ht_B
    handler_func = @myType.handler_B
  Case Else
    handler_func = @myType.handler_default
  End Select
End Constructor

Sub myType.handler
  handler_func(This)
End Sub

Sub myType.handler_default (ByRef obj As myType)
  Print "Standardhandler"
End Sub

Sub myType.handler_A(ByRef obj As myType)
  Print "Handler der Methode A"
End Sub

Sub myType.handler_B (ByRef obj As myType)
  Print "Handler der Methode B"
End Sub

Dim objects(1 To 4) As myType => { myType.handlertype.ht_B, myType.handlertype.ht_default, myType.handlertype.ht_A }
  'Das vierte Array-Element wird die Standardhandlermethode sein

For i As Integer = 1 To 4
  Print i,
  objects(i).handler()
Next

Sleep

Beispiel 2 - Verwendung einer statischen Memberprozedur wie eine nicht statische:

Type myType
  Declare Static Function add (x As Integer, y As Integer) As Integer

  dummy As Integer
End Type

Function myType.add (x As Integer, y As Integer) As Integer
  Return x + y
End Function

Print myType.add (5, 3)

Sleep

Unterschiede zu QB: neu in FreeBASIC

Siehe auch:
BefehlsreferenzeintragSTATIC (Anweisung), BefehlsreferenzeintragSTATIC (Klausel), BefehlsreferenzeintragSTATIC (Meta), BefehlsreferenzeintragSTATIC (Schlüsselwort), BefehlsreferenzeintragDECLARE, BefehlsreferenzeintragTYPE, BefehlsreferenzeintragCLASS, BefehlsreferenzeintragObjektorientierung


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