Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Eigener Konstruktor (https://www.delphipraxis.net/151940-eigener-konstruktor.html)

uligerhardt 7. Jun 2010 14:47

AW: Eigener Konstruktor
 
Zitat:

Zitat von FriendOfDelphi (Beitrag 1026376)
Wenn ich den Quellcode komplett, also Klassendefinition und die Verwendung der Klasse in eine Unit schreibe, dann kann ich einen Breakpoint im Konstruktor setzen und dieser wird auch durchlaufen.
Wenn ich, wie von mir bevorzugt, die Klasse in einer eigenen Unit definiere und diese in einer anderen Unit nur verwenden will, dann nimmt der Compiler die Breakpoints im Konstruktor weg, so dass ich dort keinen mehr setzen kann.

Das dürfte daran liegen, dass du den Konstruktor als privat deklariert hast. Wenn du ihn von außen - insbesondere aus einer anderen Unit - aufrufen willst, wäre public angesagt.

Jens Hartmann 7. Jun 2010 14:48

AW: Eigener Konstruktor
 
Hallo,

ich bin mir nicht sicher, aber in einer anderen Unit kann es nicht gehen, weil der constructor Privat ist...

Delphi-Quellcode:
type
  TAuto = class(TObject)
  private
    FFarbe: string;
    procedure SetFarbe(Farbe: string);
    constructor Create(col: string);//hier eventuell mal schauen.
  public
    property Farbe: string read FFarbe write SetFarbe;
end;
EDIT... Zu spät...

Gruß Jens

FriendOfDelphi 7. Jun 2010 14:58

AW: Eigener Konstruktor
 
Zitat:

Zitat von mkinzler (Beitrag 1026379)
Befindet sich die Unit (bzw. deren Pfad) im Suchpfad?

Die Unit ist im selben Projekt.
Der Compiler meckert nicht.
Die Unit wird also gefunden.

freak4fun 7. Jun 2010 15:06

AW: Eigener Konstruktor
 
Zitat:

Zitat von FriendOfDelphi (Beitrag 1026389)
Zitat:

Zitat von mkinzler (Beitrag 1026379)
Befindet sich die Unit (bzw. deren Pfad) im Suchpfad?

Die Unit ist im selben Projekt.
Der Compiler meckert nicht.
Die Unit wird also gefunden.

DIe Unit wird gefunden, aber der Constructor nicht. Wenn du eine Klasse in einer Unit hast, kann da alles auf den Private-Bereich zugreifen. Wenn du nun aber die Klasse in eine andere Unit schreibst, kann die erste Unit nicht mehr auf den Private-Bereich der nun ausgelagerten Klasse zuegreifen. Daraus folgt, das du den Constructor als Public deklarieren musst. Dann wird auch der Breakpoint nicht mehr entfernt. ;)

FriendOfDelphi 7. Jun 2010 15:08

AW: Eigener Konstruktor
 
Ok. Das war's.
Der Konstruktor muss public sein.

Ist das denn so "richtiger" Quellcode?
Ich meine gelesen zu haben, dass man das so nicht machen soll, oder?

DeddyH 7. Jun 2010 15:24

AW: Eigener Konstruktor
 
Was soll man wie nicht machen? Vordefinierte Werte im Konstruktor zuweisen? Dafür ist der doch u.a. da.

Sir Rufo 7. Jun 2010 15:24

AW: Eigener Konstruktor
 
Zitat:

Zitat von FriendOfDelphi (Beitrag 1026395)
Ok. Das war's.
Der Konstruktor muss public sein.

Ist das denn so "richtiger" Quellcode?
Ich meine gelesen zu haben, dass man das so nicht machen soll, oder?

Man macht es halt so, dass es funktioniert. Dann ist das "richtiger" Quellcode.

und wenn beim Create der hinterlegte Code ausgeführt werden soll, dann muss der constructor public sein.

Jens Hartmann 7. Jun 2010 15:25

AW: Eigener Konstruktor
 
Hallo,

z.B.
privat, ist nur in der eigenen Unit sichtbar.
public im gesamten Projekt.

Man sollte also als privat deklarieren, was nach außen hin nicht sichtbar sein soll, z.B. Methoden, die in der Klasse selbst benötigt werden. Da du den Constructor ja außen benötigen tust, muss er public sein.

Eine Aufstellung dieser Deklarationen findest du in der Hilfe von Delphi...

Gruß Jens

mkinzler 7. Jun 2010 15:29

AW: Eigener Konstruktor
 
Ein constructor sollte immer public sein. Soll die Klasse nur in einer Unit verwendbar sein dann deklariert man sie halt unter Implementation

Tryer 7. Jun 2010 16:07

AW: Eigener Konstruktor
 
Und falls SetFarbe irgendwas "wichtiges" macht, dann würde ich einfach auch im Constructor SetFarbe('rosa') bzw. Farbe := 'rosa' aufrufen statt nur das Feld FFarbe zu setzen.

Grüsse, Dirk


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:09 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz