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:
E2170 Eine nichtvirtuelle Methode kann nicht überschrieben werden
Okay, muss also ein
virtual hinter den Konstruktor von Tclass1.
virtual klappt allerdings nicht zusammen mit reintroduce, also muss reintroduce wieder weg.
Steht also nur virtual dahinter, es kommt zur Warnmeldung:
Zitat:
W1010 Methode 'Create' verbirgt virtuelle Methode vom Basistyp 'TCustomControl'
Hier nochmal als Code:
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:
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;
Meine Frage:
Was müsste richtiger Weise hinter dem Konstruktor für eine Direktive stehen?
Oder soll ich die Warnmeldung einfach ignorieren?