Referenz - CONSTRUCTOR (Klassen)
Syntax A:
TYPE TypeName
' Feld-Deklarationen
DECLARE CONSTRUCTOR ( )
DECLARE CONSTRUCTOR ( [ Parameterliste ] )
End Type
Syntax B:
CONSTRUCTOR Typename ( [ Parameterliste ] )
' Anweisungen
END CONSTRUCTOR
Typ: Prozedur
Kategorie: Klassen
Ein Klassen-Konstruktor ist eine Prozedur, die aufgerufen wird, sobald eine UDT-Variable (user defined Type - siehe TYPE (UDT)) erstellt wird. Für einen alternativen Verwendungszusammenhang siehe CONSTRUCTOR (Module).
Dieses Schlüsselwort ist nur zulässig, wenn mit der Kommandozeilenoption -lang fb compiliert wird; siehe FB-Dialektformen.
- 'TypeName' ist der Name eines UDTs, wie er unter TYPE (UDT) erklärt wird.
- 'Feld-Deklarationen' sind die Deklarationen, die den UDT oder die Klasse ausmachen. Siehe dazu TYPE (UDT), PROPERTY, OPERATOR.
- 'Parameterliste' ist vom selben Format wie bei SUB. Auch optionale Argumente werden unterstützt.
- 'Anweisungen' ist ein Programmcode, der den Regeln einer SUB folgt.
Konstruktoren bei Klassen werden immer dann ausgeführt, wenn eine Variable eines Typs erstellt wird, der einen Konstruktor besitzt. In einem Konstruktor können die Attribute des UDTs bereits mit Standardwerten ausgefüllt werden sowie allgemeine Aufgaben erledigt werden, die bei der Erstellung der Variable fällig werden.
Befindet sich der TYPE innerhalb eines NAMESPACEs, so wird die Zuordnung genau so durchgeführt wie bei normalen Prozeduren innerhalb von NAMESPACEs; es ist möglich, den Bezeichner des TYPEs als Präfix vor den Bezeichner der Property zu hängen oder mittels USING das Präfix für den gesamten Code überflüssig machen.
Es ist möglich, einem Typen mehrere Konstruktoren zuzuordnen; diese müssen sich dann durch ihre Parameterliste unterscheiden. Siehe dazu auch OVERLOAD. Ein Konstruktor darf gar keinen, einen oder mehrere Parameter benutzen.
Welcher Konstruktor aufgerufen wird, hängt von den Parametern ab, die bei der Erstellung des Typs angegeben werden. Die Parameter werden dabei ähnlich übergeben, wie dies bei Variablen-Initiatoren geschieht:
Bei einem Parameter:
DIM VariablenName AS DatenTyp = Wert
Bei mehreren Parametern:
DIM VariablenName AS DatenTyp = DatenTyp( Wert1, Wert2, ... )
Statt DIM können natürlich auch COMMON und STATIC verwendet werden.
CONSTRUCTOR überschreibt den Standard-Konstruktor einer Klasse. Somit sind manche Deklarationsformen bei Variablen nur noch möglich, wenn der entsprechende Konstruktor auch definiert wurde. Einige Aufrufe wie REDIM oder ERASE benötigen einen Standard-Konstruktor, d. h. es darf entweder gar kein Konstruktor angegeben werden oder es muss ein parameterloser Konstruktor bereitgestellt werden (weitere Konstruktoren mit Parametern sind natürlich möglich).
Innerhalb der CONSTRUCTOR-Prozedur kann über das Schlüsselwort THIS auf die Attribute des UDTs zugegriffen werden.
Enthält der initiierte UDT selbst Felder, die Klassen mit eigenen Konstruktoren darstellen, so werden diese zuerst aufgerufen.
Klassen-Konstruktoren müssen PUBLIC sein; siehe PUBLIC (UDT).
Das Constructor-Schlüsselwort leitet einen eigenen SCOPE-Block ein. Siehe dazu auch SCOPE.
Beispiel:
Type sample
Text As String
Declare Constructor ()
Declare Constructor ( a As Integer )
Declare Constructor ( a As Single )
Declare Constructor ( a As String, b As Byte )
Declare Operator Cast () As String
End Type
Constructor sample ()
Print "Konstruktor sample ()"
Print
THIS.Text = "Leer"
End Constructor
Constructor sample ( a As Integer )
Print "Konstruktor sample ( a As Integer )"
Print " a = "; a
Print
THIS.Text = Str(a)
End Constructor
Constructor sample ( a As Single )
Print "Konstruktor sample ( a As Single )"
Print " a = "; a
Print
THIS.Text = Str(a)
End Constructor
Constructor sample ( a As String, b As Byte )
Print "Konstruktor sample ( a As String, b As Byte )"
Print " a = "; a
Print " b = "; b
Print
THIS.Text = a & "," & b
End Constructor
Operator sample.CAST () As String
Return THIS.Text
End Operator
Print "Erstelle x1"
Dim x1 As sample
Print "Erstelle x2"
Dim x2 As sample = 1
Print "Erstelle x3"
Dim x3 As sample = 99.9
Print "Erstelle x4"
Dim x4 As sample = sample( "aaa", 1 )
Print "Werte:"
Print " x1 = "; x1
Print " x2 = "; x2
Print " x3 = "; x3
Print " x4 = "; x4
Sleep
Ausgabe:
Erstelle x1
Konstruktor sample ()
Erstelle x2
Konstruktor sample ( a As Integer )
a = 1
Erstelle x3
Konstruktor sample ( a As Single )
a = 99.9
Erstelle x4
Konstruktor sample ( a As String, b As Byte )
a = aaa
b = 1
Werte:
x1 = Leer
x2 = 1
x3 = 99.9
x4 = aaa,1
Unterschiede zu QB: neu in FreeBASIC
Unterschiede zu früheren Versionen von FreeBASIC:
- CONSTRUCTOR für Klassen existiert seit FreeBASIC v0.17.
Unterschiede unter den FB-Dialektformen: nur in der Dialektform -lang fb verfügbar
Siehe auch:
DESTRUCTOR (Klassen), CONSTRUCTOR (Module), TYPE (UDT), NAMESPACE, Objektorientierung
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|