![]() |
Klasse um eine funktion erweitern - Vererbung
Hallo leute!
ich möchte die Klasse TJvZlibMultiple so erweitern, damit ich während des packvorgangs auch abbrechen kann. in der Function AddFile müsste ich da eine überprüfung einbauen, ob eine variable isBreakPressed auf true ist, um dann das packen abzubrechen. wie muss ich da vorgehen? hier ein ausschnitt der ursprünglichen klasse
Delphi-Quellcode:
und hier meine vererbte
TJvZlibMultiple = class(TJvComponent)
private ... protected procedure AddFile(FileName, Directory, FilePath: string; DestStream: TStream); procedure DoProgress(Position, Total: Integer); virtual; public constructor Create(AOwner: TComponent); override; function CompressFiles(Files: TStrings): TStream; overload; ... published ... end;
Delphi-Quellcode:
bei AddFile beschwert er sich: "Eine statische Methode kann nicht überschrieben werden"
type
TJvZlibMultipleWithBreak = class(TJvZlibMultiple) private isBreakPressed: boolean; public constructor Create(AOwner: TComponent); override; protected procedure AddFile(FileName, Directory, FilePath: string; DestStream: TStream); override; end; was mach ich falsch, bzw. besser gesagt bin ich da aufn richtigen weg, oder wie geh ich das an? danke schonmal |
Re: Klasse um eine funktion erweitern - Vererbung
"override" kannst du nur benutzten, wenn es sich um eine virtuelle Methode handelt!
Wenn du "override" weglässt, wird die Methode komplett überschrieben; du kannst aber immer noch per "inherited" auf die ursprüngliche Methode zurückgreifen!
Delphi-Quellcode:
TJvZlibMultipleWithBreak.AddFile(FileName, Directory, FilePath: string; DestStream: TStream);
begin [..eigener Code..] inherited; // <-- Aufruf der ursprünglichen Methode [..eigender Code..] end; |
Re: Klasse um eine funktion erweitern - Vererbung
jo hab ich mir schon auch gedacht, aber ich möchte ja eher wissen, wie ich das problem sonst angehen kann?
|
Re: Klasse um eine funktion erweitern - Vererbung
Oops, zu langsam editiert :| ! Schau dir mein obiges Posting nochmal an!
|
Re: Klasse um eine funktion erweitern - Vererbung
![]() ![]() ![]() ![]() ![]() :zwinker: Bei einem der vielen wirst du fündig... Und das könnte auch helfen: ![]() Oder einfach mal im Forum suchen... Bye |
Re: Klasse um eine funktion erweitern - Vererbung
Zitat:
Du solltest dein Anliegen als neues Feature auf ![]() vortragen. Am Besten gleich dazuschreiben, wie TJvZlibMultiple erweitert werden muss. Dann musst du keine neue Klasse ableiten; was sowieso nicht funktioniert, da es vom Design her nicht vorgesehen war. |
Re: Klasse um eine funktion erweitern - Vererbung
Wieso sollte das nicht funkionieren? Die neue Klasse erbt alles der Vorgängerklasse! Untested, aber so könnte es gehen:
Delphi-Quellcode:
type
TJvZlibMultipleWithBreak = class(TJvZlibMultiple) private FBreakPressed: boolean; protected procedure AddFile(FileName, Directory, FilePath: string; DestStream: TStream); virtual; public constructor Create(AOwner: TComponent); override; property BreakPressed: boolean read FBreakPressed write FBreakPressed; end; constructor TJvZlibMultipleWithBreak.Create(AOwner: TComponent); begin inherited; FBreakPressed := false; end; procedure TJvZlibMultipleWithBreak.AddFile(FileName, Directory, FilePath: string; DestStream: TStream); begin if not BreakPressed then inherited; end; |
Re: Klasse um eine funktion erweitern - Vererbung
Zitat:
Die procedure TJvZlibMultiple.AddFile müsste virtuell sein, damit die Prozedur aufgerufen wird. Die Klasse TJvZlibMultiple ruft ja aus CompressFiles die procedure AddFile auf. Dass es in einer abgeleiteten Klasse eine geänderte Procedure AddFiles gibt, das "weiss" TJvZlibMultiple.CompressFiles nicht. |
Re: Klasse um eine funktion erweitern - Vererbung
Zitat:
Man muss eine Methode nur dann als virtual oder dynamic deklarieren, wenn man sie mittels override überschreiben möchte. |
Re: Klasse um eine funktion erweitern - Vererbung
Was shmia uns sagen will, ist, dass andere Methoden von TJvZlibMultiple die intern "Add" aufrufen, eben von dieser "neuen" Add-Methode nichts wissen (können!) und deshalb immer die ursprüngliche Add-Methode aufrufen werden!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 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 by Thomas Breitkreuz