Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Constructor von TThread überschreiben (https://www.delphipraxis.net/136690-constructor-von-tthread-ueberschreiben.html)

Viktorii 6. Jul 2009 07:40


Constructor von TThread überschreiben
 
Hallo zusammen.

Wenn ich versuche den Constructor von TThread zu überschreiben, bekomme ich folgenden Fehler:

Delphi-Quellcode:
 
E2170 Eine nichtvirtuelle Methode kann nicht überschrieben werden
Hab mal ein wenig gesucht und z.B in diesem Thread wird gesagt das man dies machen kann.

Geht das nun oder nicht :wiejetzt:

Vielen Dank

himitsu 6. Jul 2009 07:49

Re: Constructor von TThread überschreiben
 
diesen Konstructor überschreibt man nicht, man erstellt einfach nur einen Neuen.

Fazit: laß das override weg

Viktorii 6. Jul 2009 08:14

Re: Constructor von TThread überschreiben
 
Achso. Ja so klappt es :drunken:

Vielen Dank

CoLT 6. Jul 2009 09:46

Re: Constructor von TThread überschreiben
 
richtiger wäre es so:

Delphi-Quellcode:
Type

TMyThread = class(TThread)
...
public
 constructor Create(CreateSuspended: Boolean); reintroduce; //da sonst compiler warnung
end;


implementation

constructor Create;
begin
  inherited Create(CreateSuspended);
  //eigenes zeugs
end;

end.
CoLT

himitsu 6. Jul 2009 09:51

Re: Constructor von TThread überschreiben
 
Das reintroduce unterdrückt ja nur die Compilerwarnung und macht sonst nix, also für die Funktion ist es nicht von Belangen ... stört also nicht, wenn es nicht da wäre.

Und inherited sollte man eh immer machen (außer man läßt es absichtlich geziehlt weg, aber dafür gibt es fast nie Gründe)

Muetze1 6. Jul 2009 14:01

Re: Constructor von TThread überschreiben
 
Zitat:

Zitat von CoLT
richtiger wäre es so:

Nein, wäre hier sogar richtig falsch. Der TThread hat keinen virtuellen Constructor und ist deshalb auch nicht überschreibbar. Von daher die Fehlermeldung im ersten Beitrag.

ReIntroduce dient zum unterdrücken der Compilerwarnung, dass die neue Methode eine virtuelle verdeckt. (wie von himitsu schon ausgeführt)

Von daher ist ein Reintroduce hier vollkommen falsch, da bei einer Änderung der Basisklassen hier Hinweise auf mögliche Fehlerquellen unterdrückt werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz