Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi override a static method... (https://www.delphipraxis.net/116822-override-static-method.html)

Andy386 7. Jul 2008 10:14


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 ?

marabu 7. Jul 2008 10:20

Re: override a static method...
 
Hallo Andy,

du kannst die Sichtbarkeit einer Methode nicht verringern, nur erhöhen.

Grüße vom marabu

Jelly 7. Jul 2008 15:11

Re: override a static method...
 
Zitat:

Zitat von Andy386
Bei override kommt ein error.

Statische Methoden kann man auch nich überschreiben, genausowenig wie virtual deklarieren.

W
Zitat:

Zitat von Andy386
enn ich genau erzähle worum es geht, werdet ihr mich steinigen...

Dann schilder doch mal dein Problem. Ich hab heut noch keine gesteinigt :mrgreen:

NormanNG 7. Jul 2008 15:17

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.

Andy386 8. Jul 2008 10:07

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 ?

marabu 8. Jul 2008 10:37

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

Andy386 9. Jul 2008 13:10

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 !

Cyf 9. Jul 2008 13:31

Re: override a static method...
 
Beispiel Wrapper, sowas ist nich aufwendig:

Delphi-Quellcode:
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;
Sollte das Prinzip klarmachen...

Phoenix 9. Jul 2008 13:35

Re: override a static method...
 
Zitat:

Zitat von Andy386
ich würde gerne eine static method (in der Elternklasse public definiert) in den private Teil schieben...
Wenn ich genau erzähle worum es geht, werdet ihr mich steinigen...

Wahrscheinlich.

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