Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [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: Klassen

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 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-Record, haben Vorrang. Wird eine solche lokale Variable verwendet, kann auf den Record nur mit THIS zugegriffen werden. Wenn eine globale Variable denselben Namen besitzt wie ein UDT-Record, besitzt der Record 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 den Record
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 den Record - erkennbar an 'THIS'
  this.myVar = newValue
  Print this.myVar

  ' verändere nochmals den Record - 'THIS' kann ausgelassen werden
  myVar = newValue
  Print myVar

  ' Verwendung einer lokalen Variablen
  Dim As Integer myVar = 999
  Print "lokal:  "; myVar
  Print "Record: "; 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 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: existiert seit FreeBASIC v0.17

Unterschiede unter den FB-Dialektformen: nur in der Dialektform Befehlsreferenzeintrag-lang fb verfügbar

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


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