Referenz - THIS
Syntax: THIS
Typ: Schlüsselwort
Kategorie: Klassen
THIS wird in Prozeduren verwendet, die einem UDT (user defined type) fest zugeordnet sind, um auf die Attribute 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 das Attribut 'myVar' auf 0
test.myVar = 0
Print "'myVar' = "; test.myVar
' Rufe die zugeordnete SUB auf
test.MyCall()
' Jetzt ist der Wert gleich 10
Print test.myVar
Sleep
Sub myType.MyCall
this.myVar = 10
' Alternativ kann WITH verwendet werden:
' WITH THIS
' .myVar = 10
' END WITH
End Sub
THIS kann auch ausgelassen werden; so funktioniert das Beispiel auch, wenn die Sub folgendermaßen aussieht:
Sub myType.MyCall
myVar = 10
End Sub
Lokalen Variablen, die denselben Namen besitzen wie ein UDT-Attribut, haben Vorrang. Wird eine solche lokale Variable verwendet, kann auf das Attribut nur mit THIS zugegriffen werden. Wenn eine globale Variable denselben Namen besitzt wie ein UDT-Attribut, besitzt das Attribut Vorrang. Man kann dennoch auf den Wert der globalen Variablen zugreifen, indem vor ihrem Namen zwei Punkte gesetzt werden.
Type myType
Declare Sub changeVar (newValue As Integer)
myVar As Integer = 5 ' Initialwert für das Attribut
End Type
' Damit die globale Variable innerhalb des Unterprogramms der Klasse bekannt ist,
' muss sie vorher dimensioniert werden
Dim Shared As Integer myVar = 1
Sub myType.changeVar (newValue As Integer)
' verändere das Attribut - erkennbar an 'THIS'
this.myVar = newValue
Print this.myVar
' verändere nochmals das Attribut - 'THIS' kann ausgelassen werden
myVar = newValue
Print myVar
' Verwendung einer lokalen Variablen
Dim As Integer myVar = 999
Print "lokal: "; myVar
Print "Attribut: "; THIS.myVar ' jetzt ist 'THIS' notwendig
' Zugriff auf die globale Variable
' die zwei Punkte sorgen dafür, dass der "Scope" der Klasse verlassen wird
Print "global: "; ..myVar
End Sub
Dim As myType test
test.changeVar(10)
Sleep
Es sei dazu aber gesagt, dass man solche Situationen vermeiden sollte, da sich sonst schnell Fehler einschleichen und Variablen nicht die erwarteten Werte enthalten, weil statt auf die globale nur auf die lokale Variable zugegriffen 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: existiert seit FreeBASIC v0.17
Unterschiede unter den FB-Dialektformen: nur in der Dialektform -lang fb verfügbar
Siehe auch:
TYPE (UDT), CONSTRUCTOR, DESTRUCTOR, BASE, PROPERTY, Objektorientierung
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|