![]() |
override a static method...
Hallo,
ich würde gerne eine static method (in der Elternklasse public definiert) in den private Teil schieben... Habs schon mit virtual und reintroduce versucht, aber Delphi lässt immer noch den Zugriff auf die public-Klasse zu. Bei override kommt ein error. Wenn ich genau erzähle worum es geht, werdet ihr mich steinigen... Gibt's da noch irgendwas oder muss ich die Elternklasse ändern/kopieren ? |
Re: override a static method...
Hallo Andy,
du kannst die Sichtbarkeit einer Methode nicht verringern, nur erhöhen. Grüße vom marabu |
Re: override a static method...
Zitat:
W Zitat:
|
Re: override a static method...
Hi,
du kannst auch eine Wrapper-Klasse erstellen, die nur die gewünschten Eigenschaften und Methode nach außen weitergibt. |
Re: override a static method...
Danke für den Tipp, NormanNG !
Leider konnte ich nicht wirklich was dazu finden, wie so eine Wrapper-Klasse aussehen soll bzw. ob man mit ihr so umgehen kann, wie mit dem Orginal-Objekt. Gibt es da irgendwo ein Tutorial zu ? |
Re: override a static method...
Moin,
ist die "Eltern-Klasse" von dir entworfen worden? Der Klassenentwurf in Delphi geschieht üblicherweise zweistufig: Die erste Stufe liefert eine Basisklasse, in der zweiten Stufe veröffentlicht eine Nutzklasse die gewünschten Methoden und Properties. Alle VCL-Komponenten sind nach diesem Muster gestrickt. Wenn die beteiligten Klassen von dir selbst entworfen wurden, dann kannst du das noch korrigieren. Wenn nicht, dann wird der Wrapper sehr schreibaufwändig. Freundliche Grüße |
Re: override a static method...
nein, ich habe die Eltern-Klasse nicht selber geschrieben. Ich hab jetzt einfach diesen Code kopiert und dann die Klasse in den private Teil gesteckt. Ist zwar nicht schön (besonders im Hinblick auf das OOP-Konzept), aber bestimmt schneller als ein aufwändiger Wrapper.
Vielen Dank für die Hilfe, klappt jetzt alles so wie gewünscht ! |
Re: override a static method...
Beispiel Wrapper, sowas ist nich aufwendig:
Delphi-Quellcode:
Sollte das Prinzip klarmachen...
type
TMyObject= class(TObject) public function A: Integer; procedure B; constructor Create; end; TMyWrapper = class(TObject) private FMyObject: TMyObject; function A: Integer; public procedure B; constructor Create; destructor Destroy; override; end; implementation [...] function TMyWrapper.A: Integer; begin Result:= FMyObject.A; end; procedure TMyWrapper.B; begin FMyObject.B; end; constructor TMyWrapper.Create; begin inherited Create; FMyObject:= TMyObject.Create; end; destructor TMyWrapper.Destroy; begin FMyObject.Free; end; |
Re: override a static method...
Zitat:
Wieso willst Du das machen? Man kann mit Basisklasse.StaticMethod sowieso IMMER darauf zugreifen. Es macht gar überhaupt keinen Sinn, eine Klassenmethode irgendwie ändern / überschreiben oder sonstwas damit machen zu wollen (ausser aufzurufen *g*). Ich würde mal sagen, wenn Du das tatsächlich brauchst hast Du ein massives Designproblem in Deiner Klassenstruktur. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:39 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-2025 by Thomas Breitkreuz