Buchempfehlung
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
"Der" Petzold, das über 1000 Seiten starke Standardwerk zum Win32-API - besonders nützlich u. a. bei der GUI-Programmierung in FreeBASIC! [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 - THIS

Referenz-Navigation

 

Syntax: THIS
Typ: Schlüsselwort
Kategorie: Datentypen

THIS wird in Prozeduren verwendet, die einem BefehlsreferenzeintragUDT (user defined type) fest zugeordnet sind, um auf die Records des UDTs zuzugreifen. Dazu zählen auch BefehlsreferenzeintragProperties, nicht-statische BefehlsreferenzeintragOperatoren sowie BefehlsreferenzeintragCONSTRUCTOR,- und BefehlsreferenzeintragDESTRUCTOR-Prozeduren.

Auf THIS kann mit BefehlsreferenzeintragWITH zugegriffen werden.

Beispiel:

Type myType
    Declare Sub MyCall ()

    myVar As Integer
End Type

Dim As myType test

'Setze den Record 'myVar' auf 0
test.myVar = 0
Print "'myVar' = "; test.myVar

'Rufe die zugeordnete SUB auf
test.MyCall()

'jetzt ist der 'value' gleich 10
Print test.myVar
Sleep

Sub myType.MyCall ()
    this.myVar = 10
End Sub

THIS kann aber auch ausgelassen werden, so funktioniert das Beispiel auch, wenn die Sub so aussieht:

Sub myType.MyCall ()
    myVar = 10
End Sub

Doch was ist, wenn eine globale Variable exakt genauso heißt, wie eine Variable innerhalb meines UDTs, man aber auf die globale zugreifen will? Nun auch dafür gibt es eine Lösung:

Type myType
    Declare Sub changeVar ( newValue As Integer )

    myVar As Integer = 5 'Initialwert für die lokale Variable
End Type

Dim Shared As Integer myVar 'Damit die globale Variable innerhalb des Unterprogramms der Klasse bekannt ist, muss sie vorher dimensioniert werden

Sub myType.changeVar ( newValue As Integer )
    this.myVar = newValue 'verändert die lokale Variable - erkennbar an 'this'
    Print this.myVar

    myVar = newValue 'verändert auch die lokale Variable - 'this' kann ausgelassen werden
    Print myVar


    ..myVar = newValue 'verändert die globale Variable - die zwei Punkte sorgen dafür, dass der "Scope" der Klasse verlassen wird
    Print ..myVar
End Sub

Dim As myType test


test.changeVar(10)
Print myVar 'Ausgabe der globalen Variable

Sleep

Es sei dazu aber gesagt, dass man solche Situationen vermeiden sollte, da einem schnell Fehler unterlaufen und Variablen nicht die erwarteten Werte enthalten, weil statt auf die globale nur die lokale Variable geändert wurde oder umgekehrt.

Eine andere Art der Verwendung von THIS ist die mit Pointern auf Typen. In diesen Fällen darf nicht wie gewohnt mit einem Punkt auf die Variablen zugegriffen werden,

Print this.myVar

sondern mit einem BefehlsreferenzeintragPfeil.

Beispiel:

Type myType
    Declare Sub changeVar ( newValue As Integer )

    myVar As Integer = 5 'Initialwert für die lokale Variable
End Type

Sub myType.changeVar ( newValue As Integer )
    this.myVar = newValue
    Print this.myVar

End Sub

Dim As myType test
Dim As myType Ptr testPtr = @test

testPtr->changeVar(10)

Sleep

Unterschiede zu QB: neu in FreeBASIC.

Unterschiede zu früheren Versionen von FreeBASIC: THIS existiert seit FreeBASIC v0.17.

Unterschiede unter den FB-Dialektformen: THIS ist nur in Befehlsreferenzeintrag-lang fb zulässig

Siehe auch:
BefehlsreferenzeintragPROPERTY, BefehlsreferenzeintragTYPE (UDT), BefehlsreferenzeintragCONSTRUCTOR, BefehlsreferenzeintragDESTRUCTOR


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