Referenz - CONST (Klausel)
Syntax A:
[DECLARE] {SUB | FUNCTION} _
( [BYVAL | BYREF] [Parameter] AS [CONST] Typ [= Wert]
[, ...] )
Syntax B:
TYPE typename
DECLARE CONST {SUB | FUNCTION} Prozedurname ...
END TYPE
Typ: Klausel
Kategorie: Programmablauf
Dieser Eintrag behandelt die Klausel CONST bei der Parameterübergabe bzw. der Deklaration von Memberfunktionen. Für die Definition von Konstanten siehe CONST; für die Klausel CONST in SELECT-Anweisungen siehe SELECT CASE.
CONST bewirkt, dass auf die damit bezeichnete Variable (Syntax A) bzw. auf die Prozedur innerhalb eines UDTs (Syntax B) nur lesend, aber nicht schreibend zugegriffen werden kann.
Als Klausel bei der Parameterübergabe in Syntax A garantiert CONST, dass die damit bezeichnete Variable innerhalb der Prozedur nicht verändert werden kann. Wird beim Compiliervorgang eine Operation entdeckt, welche den Wert des Parameters möglicherweise ändert, so wird der Compiliervorgang mit einem Fehler abgebrochen. Da die Überprüfung bereits beim Compilieren stattfindet, kommt es während der Programmausführung zu keinen Geschwindigkeitsnachteilen.
Beispiel:
Sub foo (x As Integer, y As Const Integer)
Print x, y
x = 5
' y = 7 ' wird versucht y zu ändern, gibt der Compiler einen Fehler aus
Print x, y
End Sub
foo(1, 2)
Sleep
Als Klausel bei Memberfunktionen (Syntax B) bezieht sich der Schreibschutz auf die Instanz des UDTs, auf die mit THIS zugegriffen werden kann. Damit ist es der Prozedur nicht erlaubt, schreibend auf die Attribute des UDTs zuzugreifen oder eine nicht-konstante Memberfunktion aufzurufen. Wird beim Compiliervorgang eine solche nicht erlaubte Operation entdeckt, so wird der Compiliervorgang mit einem Fehler abgebrochen.
Memberfunktionen können nicht gleichzeitig mit CONST und STATIC deklariert werden, da statische Memberfunktionen keinen THIS-Parameter besitzen.
Beispiel:
Type foo
x As Integer
c As Const Integer = 0
Declare Const Sub Lesen1()
Declare Const Sub Lesen2()
Declare Sub Schreiben1()
Declare Sub Schreiben2()
End Type
Sub foo.Schreiben1
x = 1 ' ein nicht konstantes Attribut ändern
' c = 1 ' Compiler-Fehler: c ist konstant
End Sub
Sub foo.Schreiben2
Lesen1 ' sowohl konstante Memberfunktionen als auch
Schreiben1 ' nicht konstante können aufgerufen werden
End Sub
Sub foo.Lesen1
' auf Attribute kann lesend zugegriffen werden ...
Dim y As Integer
y = c + x
' ... sie können aber nicht verändert werden
' x = 10 ' Compiler-Fehler: Lesen1 ist konstant
End Sub
Sub foo.Lesen2
' konstante Memberfunktionen können aufgerufen werden ...
Lesen1
' ... nicht konstante jedoch nicht
' Schreiben1 ' Compiler-Fehler
End Sub
Unterschiede zu QB: neu in FreeBASIC
Unterschiede zu früheren Versionen von FreeBASIC: existiert seit FreeBASIC v0.18.3
Siehe auch:
CONST, DECLARE, SUB, FUNCTION, TYPE (UDT), SELECT CASE, DIM, Prozeduren, Objektorientierung
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|