AGB  ·  Datenschutz  ·  Impressum  







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

Sichtbarkeit einer Methode erhöhen?

Ein Thema von himitsu · begonnen am 15. Mär 2010 · letzter Beitrag vom 15. Mär 2010
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#1

Sichtbarkeit einer Methode erhöhen?

  Alt 15. Mär 2010, 11:54
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#2

Re: Sichtbarkeit einer Methode erhöhen?

  Alt 15. Mär 2010, 12:05
Ich verstehe die Frage nicht. Funktioniert doch genau so, man muss sie allerdings überschreiben.
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#3

Re: Sichtbarkeit einer Methode erhöhen?

  Alt 15. Mär 2010, 12:07
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

Re: Sichtbarkeit einer Methode erhöhen?

  Alt 15. Mär 2010, 12:28
@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
$2B or not $2B
  Mit Zitat antworten Zitat
HERMES

Registriert seit: 29. Nov 2004
142 Beiträge
 
#5

Re: Sichtbarkeit einer Methode erhöhen?

  Alt 15. Mär 2010, 12:35
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;
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Sichtbarkeit einer Methode erhöhen?

  Alt 15. Mär 2010, 12:36
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 ):

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.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

Re: Sichtbarkeit einer Methode erhöhen?

  Alt 15. Mär 2010, 12:42
@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.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

Re: Sichtbarkeit einer Methode erhöhen?

  Alt 15. Mär 2010, 12:49
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.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

Re: Sichtbarkeit einer Methode erhöhen?

  Alt 15. Mär 2010, 13:09
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;
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#10

Re: Sichtbarkeit einer Methode erhöhen?

  Alt 15. Mär 2010, 13:17
Zitat von himitsu:
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.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:41 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