PROTECTED

FreeBASIC-Referenz » Alphabetische Befehlsreferenz » P » PROTECTED

Syntax:

TYPE TypeName
   PROTECTED:
   ' geschützte Deklarationen

END TYPE

Typ: Schlüsselwort
Kategorie: Programmorganisation

Legt fest, dass die folgenden Deklarationen PROTECTED sein sollen, d.h. dass ein Zugriff nur von TYPE-eigenen Prozeduren aus zulässig ist.
Innerhalb der Typen-Deklaration wird die Zeile

PROTECTED:

eingefügt, sobald ein folgende Deklarationen geschützt sein soll, d.h. wenn der Zugriff darauf eingeschränkt werden soll.
Standardmäßig sind alle Deklarationen PUBLIC. Dies ist auch dann der Fall, wenn eine vorhergehende Typendeklaration mit PRIVATE abgeschlossen wurde.
Auf PUBLIC-Records kann aus jeder Programmsituation zugegriffen werden; auf PROTECTED-Deklarationen dürfen nur TYPE-eigene Prozeduren (SUBs, FUNCTIONs, PROPERTYs, OPERATORs, Klassen-Konstruktoren und Klassen-Destruktoren), und solche, die sich in TYPEs befinden, die vom Basis-UDT erben, zugreifen.
Ein Zugriff auf geschützte Deklarationen von außerhalb einer TYPE-eigenen Prozedur führt zu der Compiler-Fehlermeldung

Illegal member access

PROTECTED spielt vor allem in Verbindung mit Vererbung eine Rolle. Records, die PRIVATE sind, können nicht von Kind-Klassen verwendet werden, wohingegen PUBLIC und PROTECTED Records auch durch die Kind-Klasse verwendet werden dürfen.

Beispiel:

Type mutter
    Private:
    x As Integer = 1

    Protected:
    y As Integer = 2

    Public:
    z As Integer = 3
End Type

Type kind Extends mutter
    dummy As Integer
    Declare Sub ausgeben()
End Type

Sub kind.ausgeben()
    'Print x 'Funktioniert nicht, da x Private für die Mutter-Klasse ist
    Print y
    Print z
End Sub


Dim As kind einKind

einKind.ausgeben()

Sleep

Unterschiede zu älteren FreeBASIC-Versionen:
- Bis einschließlich Version 0.22.0 hat PROTECTED überhaupt keine Funktion, ab der SVN Version 0.23.0 verhält es sich hingegen wie PRIVATE.

Unterschiede zu anderen FreeBASIC-Dialektformen:
- Nur gültig für -lang fb

Unterschiede zu QuickBASIC:
- Neu in FreeBASIC

Siehe auch:
PRIVATE (UDT), PUBLIC (UDT), TYPE (UDT), EXTENDS