Hallo,
- Die Kombination der direktiven reintroduce; overload; virtual;
in einer einzigen Methode mag vielleicht vom Kompiler akzeptiert werden, ergibt aber rein logisch betrachtet wenig Sinn.
Oh doch, es ist sinnvoll, wenn der Create-Constructor der Elternklasse noch überschrieben wird.
Delphi-Quellcode:
TTestCollectionItem = class(TCollectionItem)
...
public
constructor Create(Collection: TCollection); overload; override;
constructor Create(Owner: TTestCollection;
const Name: string); reintroduce; overload; virtual;
...
end;
...
constructor TTestCollectionItem.Create(Owner: TTestCollection;
const Name: string);
begin
FName := Name;
inherited Create(Owner);
FChilds := TTestCollection.Create(Self);
end;
constructor TTestCollectionItem.Create(Collection: TCollection);
begin
inherited Create(Collection);
FChilds := TTestCollection.Create(Self);
end;
Ohne das
reintroduce;
gibt es die Warnung "[dcc32 Warnung] Dp199898Unit1.pas(37): W1010 Methode 'Create' verbirgt virtuelle Methode vom Basistyp 'TCollectionItem'", welche bei mir ein Fehler darstellt (und in den Projekt-Optionen immer auf Fehler eingestellt ist). Denn wenn der Compiler die Warnung bringt, hat der Entwickler was vergessen. Mitunter, dass die Elternklasse eine virtuelle Methode mit dem Name hat. Bei der Fehlersuche kann man richtig viel Zeit versenken.
Ohne
overload
gibts direkt einen Fehler.
Und das
virtual
braucht man, wenn in einer Kindklasse dieser Constructor überschrieben werden soll.
Mit freundlichen Grüßen, einbeliebigername.