CONSTRUCTOR (Klassen)

FreeBASIC-Referenz » Alphabetische Befehlsreferenz » C » 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: Programmorganisation

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 kompiliert wird; siehe FB-Dialektformen.

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 Records 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.

Innerhalb der CONSTRUCTOR-Prozedur kann über das Schlüsselwort THIS auf die Records 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