Skip to main content

Pointer: THIS

Der Pointer THIS ist eine spezielle Variable für die objektorientierten Programmierung.

THIS ist der Pointer eines Funktionsbausteins auf seine eigene Funktionsbaustein-Instanz. Für jeden Funktionsbaustein steht automatisch ein THIS-Pointer zur Verfügung. Sie können THIS nur in Methoden und in Funktionsbausteinen verwenden. THIS steht für die Implementierung in der Eingabehilfe in der Kategorie Schlüsselwörter zur Verfügung.

Dereferenzierung des Pointers: THIS^

. Verwendung des THIS-Pointers
  • Wenn in einer Methode eine lokale Variable eine Funktionsbaustein-Variable verschattet, können Sie die Funktionsbaustein-Variable mit dem THIS-Pointer setzen. Siehe unten Beispiel (1)

  • Wenn der Pointer auf die eigene Funktionsbaustein-Instanz zur Verwendung in einer Funktion referenziert wird. (Siehe unten Beispiel (2))

Beispiel 100. Beispiele

ST

THIS^.METH_DoIt();

FUP/CFC/LD

_cds_img_pointer_this.png


Beispiel 101. Beispiel

Die lokale Variable iVarB verschattet die Funktionsbaustein-Variable iVarB.

FUNCTION_BLOCK  fbA
VAR_INPUT
    iVarA: INT;
END_VAR
iVarA := 1;

FUNCTION_BLOCK fbB EXTENDS fbA
VAR_INPUT
    iVarB: INT := 0;
END_VAR
iVarA := 11;
iVarB := 2;

    METHOD DoIt : BOOL
    VAR_INPUT
    END_VAR
    VAR
        iVarB: INT;
    END_VAR
    iVarB := 22;    // The local variable iVarB is set.
    THIS^.iVarB := 222;    // The function block variable iVarB is set even though iVarB is obscured.

PROGRAM PLC_PRG
VAR
   MyfbB: fbB;
END_VAR

MyfbB(iVarA:=0, iVarB:= 0);
MyfbB.DoIt();


Beispiel 102. Beispiel

Ein Funktionsaufruf benötigt die Referenz auf die eigene Instanz.

FUNCTION funA
VAR_INPUT
    pFB: fbA;
END_VAR
...;

FUNCTION_BLOCK  fbA
VAR_INPUT
    iVarA: INT;
END_VAR
...;

FUNCTION_BLOCK fbB EXTENDS fbA
VAR_INPUT
    iVarB: INT := 0;
END_VAR
iVarA := 11;
iVarB := 2;

    METHOD DoIt : BOOL
    VAR_INPUT
    END_VAR
    VAR
        iVarB: INT;
    END_VAR
    iVarB := 22;    //The local variable iVarB is set.
    funA(pFB := THIS^);    //funA is called via THIS^.

PROGRAM PLC_PRG
VAR
    MyfbB: fbB;
END_VAR
MyfbB(iVarA:=0 , iVarB:= 0);
MyfbB.DoIt();


Tipp

THIS ist für die Anweisungsliste (AWL) noch nicht implementiert.