AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

"Create" neu definieren

Ein Thema von Pseudemys Nelsoni · begonnen am 18. Sep 2004 · letzter Beitrag vom 19. Sep 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

"Create" neu definieren

  Alt 18. Sep 2004, 16:21
hi,

ich möchte das Create meiner vorgängerklasse (constructor Create(AOwner: TComponent); override) neu definieren, also mit mehreren parametern. Ca. so:

constructor Create(AOwner: TComponent; ServerName, ServerDesc: string); nur gibt es da ein problem, override funktioniert nicht, da sich die parameter ja unterscheiden... ohne override kann ich aber auch kein inherited aufrufen oder? was kann ich da nun tun?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: "Create" neu definieren

  Alt 18. Sep 2004, 16:36
Du kannst inherited auch aufrufen, ohne deinen Konstruktor die override-Direktive zu verpassen, aber wenn du den Konstruktor deiner Vorgängerklasse neu defnieren willst, musst du eben diese neu schreiben.
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#3

Re: "Create" neu definieren

  Alt 18. Sep 2004, 16:39
folgendes dürfte funzen:
Delphi-Quellcode:
myClass = class(TObject)
protected
  constructor Create(AOwner: TObject); override;
public
  constructor Create(AOwner: TObject; Wasauchimmer: integer); overload;
end;

//...

constructor myClass.Create(AOwner: TObject);
begin
  inherited;
end;

constructor myClass.Create(AOwner: TObject; Wasauchimmer: integer);
begin
  Create(AOwner);
end;
obs das Create(AOwner: TObject); braucht, weiß ich nicht. Aber so gehste sicher, dass nur der neue constructor verwendet werden kann.

Habs aber nicht ausprobiert.

Vielleicht gehts aber auch ohne override ganz einfach mit dieser Zeile als aufruf für den alten constructor
Delphi-Quellcode:
begin
  inherited Create(AOwner);
end;
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: "Create" neu definieren

  Alt 18. Sep 2004, 17:36
der alte Constructor muss nicht unbedingt überschrieben werden, es reicht wenn im neuen wie schon geschrieben
  inherited Create(AOwner); steht
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: "Create" neu definieren

  Alt 18. Sep 2004, 18:13
Moin Chimaira,

Dein Beispiel kann leider nicht funktionieren, da Du die Sichtbarkeit des Konstruktors verringern willst.
(Ein Konstruktor dürfte wohl immer public sein)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Nothine
Nothine

Registriert seit: 3. Jul 2004
Ort: Mülheim an der Ruhr
198 Beiträge
 
Delphi 5 Enterprise
 
#6

Re: "Create" neu definieren

  Alt 18. Sep 2004, 18:52
Zitat von Pseudemys Nelsoni:
constructor Create(AOwner: TComponent; ServerName, ServerDesc: string); reintroduce;{<-- !!!}
mit reintroduce blockst du die meldung das du das vorgänger-create verdeckst, und du kannst weiterhin mitinherited Create(AOwner); im constructor den eigentlichen constructor der vorgänger-klasse aufrufen
if ThisPost is senseless then
ThisPost.WasPostedBy := SomeoneElse();
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#7

Re: "Create" neu definieren

  Alt 18. Sep 2004, 19:23
ich meinem buch steht, dass wenn man kein override benutzt der (in diesem fall) constructor neu definiert wird d.h der vorrige existiert nichtmehr, wie geht das dann mit inherited?

demnach wäre es ja garkein unterschied ob ich:

constructor Create(AOwner: TComponent; ServerName, ServerDesc: string); reintroduce oder

constructor Create(AOwner: TComponent; ServerName, ServerDesc: string); verwende... in beiden fällen dürfte das mit "inherited" nicht gehen oder(dazu gibts ja override...)?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von Nothine
Nothine

Registriert seit: 3. Jul 2004
Ort: Mülheim an der Ruhr
198 Beiträge
 
Delphi 5 Enterprise
 
#8

Re: "Create" neu definieren

  Alt 18. Sep 2004, 20:34
Zitat von Pseudemys Nelsoni:
ich meinem buch steht, dass wenn man kein override benutzt der (in diesem fall) constructor neu definiert wird d.h der vorrige existiert nichtmehr, wie geht das dann mit inherited?
laut delphi-hilfe brauchst du die direktive overload damit du beim aufrufen des konstruktors deiner abgeleiteten klasse nicht den konstruktor der vorgänger-klasse aufrufst. denn ohne die direktiven overload oder reintroduce wird die vorgänger-methode lediglich verdeckt, ist aber immer noch verfügbar, dementsprechend würdest du die methode des vorgängers, und nicht die neue methode aufrufen, was ganz sicher nicht sinn und zweck der übung ist. da zum benutzen der overload-direktive aber die parameter identisch zur vorgänger-methode sein müssen, kann das nicht funktionieren, weshalb du die reintroduce-direktive benutzt, die zwar den eigentlichen konstructor nicht unerreichbar macht, aber die fehlermeldung, dass du die vorgänger-methode verdeckst, aufhebt.

und wenn ich jetz nich wieder blödsinn erzählt hab, nimm reintroduce und alles is gut
if ThisPost is senseless then
ThisPost.WasPostedBy := SomeoneElse();
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#9

Re: "Create" neu definieren

  Alt 18. Sep 2004, 22:17
hoi,

ich möchte aber ausserhalb meiner klasse nicht 2 verschiedene "create" aufrufen können *g*

ich will 1 abgeändertes Create, mehr nicht, wie gehtn das :'(
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#10

Re: "Create" neu definieren

  Alt 18. Sep 2004, 23:12
Zitat von Pseudemys Nelsoni:
hoi,

ich möchte aber ausserhalb meiner klasse nicht 2 verschiedene "create" aufrufen können *g*

ich will 1 abgeändertes Create, mehr nicht, wie gehtn das :'(
Das geht nicht! Ist ein OOP prinzip. Wenn du einmal was exportierst, dann muss es auch so bleiben, damit alle nachfahren kompatibel zu der basis klasse sind.

Und da stellt siche auch schon die nächste frage: Da es sich ja offensichtlich um eine komponente handelt, würde im normalen gebrauch (komponente im formular -> DFM streaming), so oder so der normale virtuelle konstruktor, der basisklasse (TComponent), aufgerufen werden. Also wozu soll der dienen? Wenn du ihn für manuelle erzeugung benutzt, dann bleibt dir nix weiter übrig als zwei überladene Konstruktoren zu haben, oder darauf zu verzichten.
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:37 Uhr.
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