![]() |
[Methoden überschreiben] +Parameter +erneut überschreiben
Moin,
ich habe folgendes Problem: 1. ich leite von einer Klasse ab, nennen wir die abgeleitete Klasse mal Tclass1 2. ich will eine Methode (den Konstruktor) überschrieben, aber mit zusätzlichen Parametern dazu verwende ich normalerweise die Direktive reintroduce 3. nun wird von Tclass1 erneut abgeleitet: Tclass2 4. in Tclass2 soll der Konstruktor wieder überschrieben werden (aber mit den selben Parametern wie in Tclass1) dazu verwende ich normalerweise override, allerdings klappt das nicht mehr: Zitat:
virtual klappt allerdings nicht zusammen mit reintroduce, also muss reintroduce wieder weg. Steht also nur virtual dahinter, es kommt zur Warnmeldung: Zitat:
Delphi-Quellcode:
type
Tclass1 = class(TCustomControl) public constructor Create(AOwner: TComponent; Test: String); reintroduce; end; Tclass2 = class(Tclass1) public constructor Create(AOwner: TComponent; Test: String); override; // <-- klappt nicht! end;
Delphi-Quellcode:
Meine Frage:
type
Tclass1 = class(TCustomControl) public constructor Create(AOwner: TComponent; Test: String); virtual; // <-- Warnmeldung end; Tclass2 = class(Tclass1) public constructor Create(AOwner: TComponent; Test: String); override; end; Was müsste richtiger Weise hinter dem Konstruktor für eine Direktive stehen? Oder soll ich die Warnmeldung einfach ignorieren? |
Re: [Methoden überschreiben] +Parameter +erneut überschreibe
Und der Nächste, der das Rad neu erfinden will. :stupid: Wieso hantiert ihr nur dauernd rum mit dem Custom-Kram ? :shock: Was soll denn der Zweck des ganzen sein ? Eine Komponente "erfinden" , die es noch in keiner in etwa vergleichbaren Weise gibt, oder was ? So dass man tatsächlich bei TControl, also quasi beim Urknall ansetzen muss ? :mrgreen: Bei OOP gehts hauptsächlich um Vererbung und das wird kaum oder falsch genutzt. Genauso weng, wie "inherited". Man setzt die relevanten Felder vom Vorgänger durch den Aufruf von inherited . Ab da gehts dann weiter.
Guck mir den VCL-Source jetzt nicht an, weil das TControl.Create sicherlich keinen Parameter "Test : string" hat. Muss tatsächlich die Parameterliste einer Methode geändert werden, was man nach Möglichkeit vermeiden sollte, dann ist das mit "overload" zu bewerkstelligen. Reintroduce ist da ziemlich uninteressant. |
Re: [Methoden überschreiben] +Parameter +erneut überschreibe
Hallol Martin K!
Deklariere wie folgt:
Delphi-Quellcode:
Tclass1 = class(TCustomControl)
public constructor Create(AOwner: TComponent; Test: String); reintroduce; virtual; end; Tclass2 = class(Tclass1) public constructor Create(AOwner: TComponent; Test: String); override; end; Zitat:
Gruß |
Re: [Methoden überschreiben] +Parameter +erneut überschreibe
Zitat:
Da hatte ich wohl die falsche Reihenfolge :wall: @Hansa: Ich will nur eine Komponente, die mir einfach ein Bild anzeigen kann, ähnlich wie TImage. Sie soll allerdings auch den Fokus erhalten können, deshalb schien mir das Ableiten von TCustomControl genau richtig :wink: Mit overload erhalte ich übrigens auch die oben genannte Warnmeldung. |
Re: [Methoden überschreiben] +Parameter +erneut überschreibe
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23: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