AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

override a static method...

Ein Thema von Andy386 · begonnen am 7. Jul 2008 · letzter Beitrag vom 9. Jul 2008
Antwort Antwort
Andy386

Registriert seit: 26. Mär 2008
55 Beiträge
 
#1

override a static method...

  Alt 7. Jul 2008, 11:14
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 ?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: override a static method...

  Alt 7. Jul 2008, 11:20
Hallo Andy,

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

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#3

Re: override a static method...

  Alt 7. Jul 2008, 16:11
Zitat von Andy386:
Bei override kommt ein error.
Statische Methoden kann man auch nich überschreiben, genausowenig wie virtual deklarieren.

W
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
  Mit Zitat antworten Zitat
NormanNG

Registriert seit: 1. Feb 2006
294 Beiträge
 
Delphi 2007 Professional
 
#4

Re: override a static method...

  Alt 7. Jul 2008, 16:17
Hi,

du kannst auch eine Wrapper-Klasse erstellen,
die nur die gewünschten Eigenschaften und Methode
nach außen weitergibt.
Gruß
Norman
  Mit Zitat antworten Zitat
Andy386

Registriert seit: 26. Mär 2008
55 Beiträge
 
#5

Re: override a static method...

  Alt 8. Jul 2008, 11:07
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 ?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: override a static method...

  Alt 8. Jul 2008, 11:37
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
  Mit Zitat antworten Zitat
Andy386

Registriert seit: 26. Mär 2008
55 Beiträge
 
#7

Re: override a static method...

  Alt 9. Jul 2008, 14:10
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 !
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#8

Re: override a static method...

  Alt 9. Jul 2008, 14:31
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...
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#9

Re: override a static method...

  Alt 9. Jul 2008, 14:35
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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:33 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