Einzelnen Beitrag anzeigen

einbeliebigername

Registriert seit: 24. Aug 2004
140 Beiträge
 
Delphi XE8 Professional
 
#3

AW: TCollectionItem mit einer Collection - Wie?

  Alt 1. Mär 2019, 00:26
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.
  Mit Zitat antworten Zitat