Einzelnen Beitrag anzeigen

Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Mehrere unterschiedliche Objektersteller alle als 'Create'?

  Alt 10. Okt 2013, 17:23
Der Code im Konstruktor sollte möglichst einfach sein und insbesondere keine potentielle Quelle für Exceptions sein.
Den folgenden Konstruktor nennt man copy constructor weil das übergebene Objekt von gleichen Typ wie die Klasse selbst ist: constructor TKlasse.Create(vorgaenger: TKlasse); overload; Innerhalb des Konstruktors werden nur Daten kopiert und das geht so auch völlig in Ordnung.

Auch der Konstruktor der mehrere Werte aus einfachen Typen entgegen nimmt und im Objekt ablegt ist kein Problem.

Aber der Konstruktor constructor Create(ID: Integer); overload; // Einlesen aus Datenbank, Erstellen Baum passt hier nicht rein.
1. können bei Datenbankzugriffen Exceptions ausgelöst werden und 2. muss zwangsläufig auf globale Variablen (Datenmodul, Query, Connection) zugegriffen werden.

Günstiger wäre es die Erzeugung eines Objekts dieser Klasse an anderer Stelle vorzunehmen:
Delphi-Quellcode:
function TDatenModul.CreateXYobjekt(ID: Integer):TKlasse;
begin
  Query1.parameters.ParamValues['ID'] := ID;
  Query1.Open;
  Result := TKlasse.Create(Query1['...'], ...);
  Query1.Close;
end;
Für die Beantwortung der Frage was in einen Konstruktor gehört und was nicht, versuche Dir einfach vorzustellen du müsstest die Unit mit der Klasse in einem anderen Programm benützen.
Das bedeutet z.B. das der Zugriff auf globale Variablen nicht möglich ist.
fork me on Github

Geändert von sx2008 (10. Okt 2013 um 17:30 Uhr)
  Mit Zitat antworten Zitat