Syntax: THIS
Typ: Schlüsselwort
Kategorie: Datentypen
THIS wird in Prozeduren verwendet, die einem UDT (user defined type) fest zugeordnet sind, um auf die Records des UDTs zuzugreifen. Dazu zählen auch Properties, nicht-statische Operatoren sowie CONSTRUCTOR,- und DESTRUCTOR-Prozeduren.
Auf THIS kann mit WITH 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 Pfeil.
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 -lang fb zulässig
Siehe auch:
TYPE (UDT), CONSTRUCTOR, DESTRUCTOR, BASE, PROPERTY