Referenz - PUBLIC (UDT)
Syntax:
TYPE TypeName
PUBLIC:
' Deklaration öffentlicher Attribute
END TYPE
Typ: Schlüsselwort
Kategorie: Klassen
PUBLIC legt fest, dass folgende UDT-Attribute öffentlich sein sollen, d. h. dass ein Zugriff von jeder Prozedur aus zulässig sein soll. Das Schlüsselwort ist in dieser Form nur dann zulässig, wenn mit der Kommandozeilenoption -lang fb wird.
Mit PRIVATE und PROTECTED 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. PUBLIC hebt diese Einschränkung auf.
Der UDT wird regulär definiert. Innerhalb der Typen-Deklaration wird die Zeile
PUBLIC:
eingefügt, sobald die folgenden Attribute öffentlich sein soll, d. h. wenn der Zugriff von jedem Punkt aus erlaubt sein soll. PUBLIC gilt innerhalb des UDTs so lange, bis es durch das Schlüsselwort PRIVATE 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 ein privates Attribut 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ßer 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:
PUBLIC bei UDTs existiert seit FreeBASIC v0.17
Siehe auch:
PUBLIC, PRIVATE (UDT), PROTECTED, TYPE (UDT), THIS, EXTENDS, Objektorientierung
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|