![]() |
Wann ein "inherited" im Constructor ?
Hallo,
wann muß ich ein inherited im Constructor verwenden? Vielen Dank E. B. |
Re: Wann ein "inherited" im Constructor ?
Ganz klar: immer.
Wenn du es lääst, wird der Konstruktorcode der Parentklasse nicht ausgeführt: viele Felder, die man später hundertprozentig braucht, bleiben uninitialisiert. |
Re: Wann ein "inherited" im Constructor ?
immer dann wenn du den Constructor der Klasse ausführen willst.
Bei TObject macht es nicht viel Sinn da der Constructor leer ist. Bei TComponente ist es hingegen wieder vorraussetzung um ordentlich damit arbeiten zu können weil recht viel im Constructor initialisiert wird was auch von Nachfahren benötigt wird. Man kann eigentlich immer mit inherited den Constructor der Klasse aufrufen von der man erbt außer man will nicht dass das ausgeführt wird. |
Re: Wann ein "inherited" im Constructor ?
Frage an die bisherigen Antworter (juhu, ein neues Wort erfunden...): Warum nicht einfach sagen, immer wenn der Constructor virtuell ist in der Basisklasse und wir ihn überschrieben haben (bzw. neu implementieren und den alten verstecken)? Afair ist ohne einen virtuellen Constructor auch kein Zwang da, inherited auf zu rufen.
Dies ist meine Behauptung, und nun ihr... :zwinker: |
Re: Wann ein "inherited" im Constructor ?
auch ein virtueller Constructor muss nicht zwangsläufig nach dem Überschreiben aufgerufen werden wenn im Constructor nix drin steht und dieser nur dazu dient das abgeleitete Klassen bestimmte Parameter erwarten.
|
Re: Wann ein "inherited" im Constructor ?
Zitat:
|
Re: Wann ein "inherited" im Constructor ?
Thomas, schau dir mal den Constructor von TPen oder TBrush an...
Gruß Hawkeye |
Re: Wann ein "inherited" im Constructor ?
Ja, ok, somit hatte ich Recht mit meiner Annahme bzw. Frage. Das inherited muss aufgerufen werden, wenn der Constructor in der Basisklasse virtuell ist und er somit überschrieben wurde bzw. man will den verdeckte virtuellen Constructor explizit aufrufen. Wenn ein Aufruf nicht gewollt ist, dann natürlich nicht. (ich hoffe damit habe ich alle Möglichkeiten abgedeckt).
Danke! /EDIT: Ok, dann eine Frage dazu: TGraphic führt einen virtuellen Constructor ein, aber warum wird innerhalb dessen denn "Inherited Create" aufgerufen? |
Re: Wann ein "inherited" im Constructor ?
Eigentlich wollte ich diese Aussage widerlegen:
Zitat:
Delphi-Quellcode:
Zu deiner TGraphic-Frage:
type
TMyPen = class (TPen) public constructor Create; end; constructor TMyPen.Create; begin inherited; end; procedure TForm1.Button1Click(Sender: TObject); var Pen : TMyPen; begin Pen := TMyPen.Create; Pen.Color := clRed; // ohne INHERITED in TMyPen.Create knallt es hier... Pen.Free; end; Zitat:
|
Re: Wann ein "inherited" im Constructor ?
Hallo,
nur wegen dem Borland Kommentar im Zitat von Hawkeye: der Object Pascal Compiler kennt zwar abstrakte virtuelle Konstruktoren - aber zur Laufzeit knallt es auf jeden Fall beim Aufruf von inherited im Konstruktor einer abgeleiteten Klasse. Irgendwie unbrauchbar. Freundliche Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz