Buchempfehlung
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
"Der" Petzold, das über 1000 Seiten starke Standardwerk zum Win32-API - besonders nützlich u. a. bei der GUI-Programmierung in FreeBASIC! [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 - CONSTRUCTOR (Klassen)

Referenz-Navigation

 

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 BefehlsreferenzeintragTYPE (UDT)) erstellt wird. Für einen alternativen Verwendungszusammenhang siehe BefehlsreferenzeintragCONSTRUCTOR (Module).

Dieses Schlüsselwort ist nur zulässig, wenn mit der Kommandozeilenoption -lang fb compiliert wird; siehe BefehlsreferenzeintragFB-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 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 BefehlsreferenzeintragNAMESPACEs, 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 BefehlsreferenzeintragUSING 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 BefehlsreferenzeintragOVERLOAD. 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 BefehlsreferenzeintragDIM können natürlich auch BefehlsreferenzeintragCOMMON und BefehlsreferenzeintragSTATIC 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 BefehlsreferenzeintragREDIM oder BefehlsreferenzeintragERASE 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 BefehlsreferenzeintragTHIS 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 BefehlsreferenzeintragPUBLIC (UDT).

Das Constructor-Schlüsselwort leitet einen eigenen SCOPE-Block ein. Siehe dazu auch BefehlsreferenzeintragSCOPE.

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:

Unterschiede unter den FB-Dialektformen: nur in der Dialektform Befehlsreferenzeintrag-lang fb verfügbar

Siehe auch:
BefehlsreferenzeintragDESTRUCTOR (Klassen), BefehlsreferenzeintragCONSTRUCTOR (Module), BefehlsreferenzeintragTYPE (UDT), BefehlsreferenzeintragNAMESPACE, BefehlsreferenzeintragObjektorientierung


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