Referenz - PRIVATE (UDT)
Syntax:
TYPE TypeName
PRIVATE:
' Deklaration privater Attribute
END TYPE
Typ: Schlüsselwort
Kategorie: Klassen
PRIVATE legt fest, dass die folgenden Deklarationen privat sein sollen, d. h. dass ein Zugriff nur von UDT-eigenen Prozeduren aus zulässig ist. Das Schlüsselwort ist in dieser Form nur dann zulässig, wenn mit der Kommandozeilenoption -lang fb compiliert wurde (Standard).
Mit PRIVATE ist es möglich, den Zugriff auf UDT-Attribute einzuschränken. Der Zweck liegt darin, dass der Zugriff auf die entsprechenden Attribute nur noch über benutzerdefinierte Prozeduren ermöglicht wird, die eventuelle Fehler schon beim Zugriffsversuch abfangen, den Wert in ein besser verwertbares Format umwandeln, etc.
Der UDT wird regulär definiert. Innerhalb der Typen-Deklaration wird die Zeile
PRIVATE:
eingefügt, sobald die folgenden Attribute privat sein sollen, d. h. wenn der Zugriff darauf eingeschränkt werden soll. PRIVATE gilt innerhalb des UDTs so lange, bis es durch das Schlüsselwort PUBLIC oder PROTECTED abgelöst wird.
Standardmäßig sind alle Attribute PUBLIC. Dies ist auch dann der Fall, wenn eine vorhergehende Typendeklaration mit PRIVATE oder PROTECTED abgeschlossen wurde.
Auf PUBLIC-Attribute kann aus jeder Programmsituation heraus zugegriffen werden; auf PRIVATE-Attribute dürfen nur UDT-eigene Prozeduren (SUBs, FUNCTIONs, PROPERTYs, OPERATORs, Klassen-Konstruktoren und Klassen-Destruktoren) zugreifen. PROTECTED-Attribute verhalten sich wie PRIVATE-Attribute, jedoch können auf sie auch Prozeduren zugreifen, die sich in UDTs befinden, welche vom Basis-UDT erben (siehe EXTENDS).
Beachten Sie, dass auch die Prozeduren eines UDTs PUBLIC, PROTECTED oder PRIVATE sein können.
Ein Zugriff auf einen privaten Attribute von außerhalb einer UDT-eigenen Prozedur führt zu der Compiler-Fehlermeldung:
Illegal member access
Es ist erlaubt, innerhalb eines UDTs beliebig viele PUBLIC-, PRIVATE- und PROTECTED-Blöcke einzurichten.
Beispiel:
Type SecureIntArray
Private:
_ubound As Integer
_lbound As Integer
_data As Integer Ptr
Public:
Declare Property datas (index As Integer ) As Integer
Declare Property datas (index As Integer, new_value As Integer)
Declare Sub Redim (low As Integer, up As Integer)
Declare Constructor ()
Declare Destructor ()
End Type
Constructor SecureIntArray()
With This
._ubound = 0
._lbound = 0
._data = Allocate(4)
End With
End Constructor
Destructor SecureIntArray()
DeAllocate This._data
End Destructor
Property SecureIntArray.datas (index As Integer) As Integer
With This
If (index < ._lbound) Or (index > ._ubound) Then Return 0
Return ._data[index - ._lbound]
End With
End Property
Property SecureIntArray.datas (index As Integer, new_value As Integer)
With This
If (index < ._lbound) Or (index > ._ubound) Then Return
._data[index - ._lbound] = new_value
End With
End Property
Sub SecureIntArray.Redim (low As Integer, up As Integer)
If low > up Then Return
With This
DeAllocate ._data
._ubound = up
._lbound = low
._data = Allocate( (up - low + 1) * 4 )
End With
End Sub
Dim As SecureIntArray mySecInt
Dim As Integer i
mySecInt.Redim 0, 20 ' Wir erstellen ein Array mit den Indizes 0 bis 20...
For i = 0 To 24 ' und versuchen, bis zum Index 24 Werte einzufügen.
mySecInt.datas(i) = 2 * i ' Die Property wird diesen Versuch abblocken.
Next
For i = 0 To 24 ' Genauso, wie auch die Abfrage von Werten außerhalb der Array-Dimensionen fehlschlägt.
Print i, mySecInt.datas(i)
Next
Sleep
' Print mySecInt._data ' Der Pointer ist nicht verfügbar, da es sich um ein PRIVATE-Feld handelt.
Unterschiede zu QB: neu in FreeBASIC
Unterschiede zu früheren Versionen von FreeBASIC:
PRIVATE bei UDTs existiert seit FreeBASIC v0.17.
Siehe auch:
PRIVATE, PUBLIC (UDT), PROTECTED, TYPE (UDT), THIS, EXTENDS, Objektorientierung
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|