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 - PUBLIC (UDT)

Referenz-Navigation

 

Syntax:

TYPE TypeName
   PUBLIC:
   ' Deklaration öffentlicher Records

END TYPE

Typ: Schlüsselwort
Kategorie: Klassen

PUBLIC legt fest, dass folgende UDT-Records ö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 Befehlsreferenzeintrag-lang fb wird.

Mit BefehlsreferenzeintragPRIVATE und BefehlsreferenzeintragPROTECTED ist es möglich, den Zugriff auf BefehlsreferenzeintragUDT-Records einzuschränken. Der Zweck liegt darin, dass der Zugriff auf die entsprechenden Records 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 Records ö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 Records PUBLIC. Dies ist auch dann der Fall, wenn eine vorhergehende Typendeklaration mit PRIVATE oder PROTECTED abgeschlossen wurde.

Auf PUBLIC-Records kann aus jeder Programmsituation heraus zugegriffen werden; auf PRIVATE-Records dürfen nur UDT-eigene Prozeduren (BefehlsreferenzeintragSUBs, BefehlsreferenzeintragFUNCTIONs, BefehlsreferenzeintragPROPERTYs, BefehlsreferenzeintragOPERATORs, BefehlsreferenzeintragKlassen-Konstruktoren und BefehlsreferenzeintragKlassen-Destruktoren) zugreifen. PROTECTED-Records verhalten sich wie PRIVATE-Records, jedoch können auf sie auch Prozeduren zugreifen, die sich in UDTs befinden, welche vom Basis-UDT erben (siehe BefehlsreferenzeintragEXTENDS).
Beachten Sie, dass auch die Prozeduren eines UDTs PUBLIC, PROTECTED oder PRIVATE sein können.
Ein Zugriff auf einen privaten Record 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:
BefehlsreferenzeintragPUBLIC, BefehlsreferenzeintragPRIVATE (UDT), BefehlsreferenzeintragPROTECTED, BefehlsreferenzeintragTYPE (UDT), BefehlsreferenzeintragTHIS, BefehlsreferenzeintragEXTENDS, BefehlsreferenzeintragObjektorientierung


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