Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Sichtbarkeit einer Methode erhöhen? (https://www.delphipraxis.net/149137-sichtbarkeit-einer-methode-erhoehen.html)

himitsu 15. Mär 2010 10:54


Sichtbarkeit einer Methode erhöhen?
 
Joar, also bei den Property kann man doch recht einfach die Sichtbarkeit nachträglich herhöhen.
Delphi-Quellcode:
type
  THiddenClass = class
  protected
    property Irgendwas: Integer read GetWas write SetWas;
  end;

  TVisibleClass = class(THiddenClass)
  public
    property Irgendwas;
  end;
Warum kann man das aber nicht mit den Methoden machen
oder hab ich nur noch nicht rausbekommen, wie sowas geht?

Gut, möglich wäre ja die gewünschte Methode zu überschreiben (verdecken) und dann via inherited die versteckte Methode aufzurufen, aber so sonderlich elegant ist das nicht unbedingt.

Panthrax 15. Mär 2010 11:05

Re: Sichtbarkeit einer Methode erhöhen?
 
Ich verstehe die Frage nicht. Funktioniert doch genau so, man muss sie allerdings überschreiben.

DeddyH 15. Mär 2010 11:07

Re: Sichtbarkeit einer Methode erhöhen?
 
Nein. Zugegeben, ich musste das auch erst 2 mal lesen. Es geht ihm darum, die Methode in der geerbten Klasse nicht neu implementieren zu müssen, sondern einfach wie bei Properties nach public schieben und gut.

himitsu 15. Mär 2010 11:28

Re: Sichtbarkeit einer Methode erhöhen?
 
@DeddyH: Genau.

Delphi-Quellcode:
type
  THiddenClass = class
  protected
    procedure Irgendwas;
  end;

  TVisibleClass = class(THiddenClass)
  public
    procedure Irgendwas; // hier muß man ja die Methode nochmal implementieren,
  end;                   // auch wenn man sie NUR verschieben möchte

HERMES 15. Mär 2010 11:35

Re: Sichtbarkeit einer Methode erhöhen?
 
Delphi-Quellcode:
type
  THiddenClass = class
  protected
    procedure Irgendwas; virtual;
  end;

  TVisibleClass = class(THiddenClass)
  public
    procedure Irgendwas; override;// hier muß man ja die Methode nochmal implementieren,
  end;                   // auch wenn man sie NUR verschieben möchte


implementation

procedure TVisibleClass.Irgendwas;
begin
   inherited Irgendwas;
end;

uligerhardt 15. Mär 2010 11:36

Re: Sichtbarkeit einer Methode erhöhen?
 
Zitat:

Zitat von himitsu
@DeddyH: Genau.

Delphi-Quellcode:
type
  THiddenClass = class
  protected
    procedure Irgendwas;
  end;

  TVisibleClass = class(THiddenClass)
  public
    procedure Irgendwas; // hier muß man ja die Methode nochmal implementieren,
  end;                   // auch wenn man sie NUR verschieben möchte

Das wäre jetzt auch die einzige Lösung, die mir einfällt. Das hier kannst du ja trotzdem benutzen (WIMRE - soll heißen: ungetestet :mrgreen: ):

Zitat:

Zitat von HERMES
Delphi-Quellcode:
procedure TVisibleClass.Irgendwas;
begin
   inherited Irgendwas;
end;

Du kannst die "überladene" Routine noch als inline deklarieren. Dann hast du zumindest keine/geringere Laufzeiteinbußen.

himitsu 15. Mär 2010 11:42

Re: Sichtbarkeit einer Methode erhöhen?
 
@HERMES: so würde man die Methode überschreiben, aber das will ich ja nicht.

Im Ergebnis (TVisibleClass) soll die Methode (aus THiddenClass) einfach nur sichtbar werden, so als wäre sie in Public deklariert wurden, obwohl sie in THiddenClass ja versteckt (protected) ist.

Stevie 15. Mär 2010 11:49

Re: Sichtbarkeit einer Methode erhöhen?
 
Du bräuchtest quasi sowas:
Delphi-Quellcode:
type
  THiddenClass = class
  protected
    procedure Irgendwas; virtual;
  end;

  TVisibleClass = class(THiddenClass)
  public
    procedure Irgendwas; inherited;
  end;
Das gibt Delphi nicht her - wär aber ein nettes Enhancement.
Hätte aber imho keinen wirklichen Nutzen, sondern unterstützt nur die Faulheit eines Programmierers in einigen wenigen Fällen.

himitsu 15. Mär 2010 12:09

Re: Sichtbarkeit einer Methode erhöhen?
 
Zitat:

Zitat von Stevie
Das gibt Delphi nicht her - wär aber ein nettes Enhancement.
Hätte aber imho keinen wirklichen Nutzen, sondern unterstützt nur die Faulheit eines Programmierers in einigen wenigen Fällen.

Wieso Faulheit?

So könnte man eine Grundklasse erstellen und braucht dann nur, je nach Nutzen, die nötigen Funktionen freischalten.

Also genauso, wie es bei den TCustom...-Klassen der VCL auch gemacht wird.
Leider funktioniert dieses aber nur mit Properties, aber eine Klasse besteht eben auch noch aus Methoden.

Das virtual ist nicht nöig, aber so wäre es schon irgendwie OK.
Delphi-Quellcode:
type
  THiddenClass = class
  protected
    procedure Irgendwas;
  end;

  TVisibleClass = class(THiddenClass)
  public
    procedure Irgendwas; inherited;
  end;

procedure THiddenClass.Irgendwas;
begin
end;

Stevie 15. Mär 2010 12:17

Re: Sichtbarkeit einer Methode erhöhen?
 
Zitat:

Zitat von himitsu
Zitat:

Zitat von Stevie
Das gibt Delphi nicht her - wär aber ein nettes Enhancement.
Hätte aber imho keinen wirklichen Nutzen, sondern unterstützt nur die Faulheit eines Programmierers in einigen wenigen Fällen.

Wieso Faulheit?

So könnte man eine Grundklasse erstellen und braucht dann nur, je nach Nutzen, die nötigen Funktionen freischalten.

Kann man doch, sind nur einige Zeilen Code mehr zu schreiben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:53 Uhr.
Seite 1 von 2  1 2      

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