Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi reintroduce; (https://www.delphipraxis.net/28286-reintroduce%3B.html)

Pseudemys Nelsoni 22. Aug 2004 19:28


reintroduce;
 
hi,

ich versuche eine methode aus einer vorgänger klasse neu zu definieren...

Delphi-Quellcode:
original:

procedure DoActivate(Value: Boolean); override;
Delphi-Quellcode:
meine nachfolgermethode neu definiert:

procedure DoActivate(Value: Boolean; TSSendDataRec: TTSSendDataRec); reintroduce; override;
fehler ist:

Zitat:

[Fehler] tsSocketClass.pas(10): Deklaration von 'DoActivate' unterscheidet sich von vorheriger Deklaration
aber sollte nicht genau DAS mit reintroduce möglich sein?

mirage228 22. Aug 2004 19:34

Re: reintroduce;
 
Hi,

vielleicht ist die direktive overload angebrachter. ;)

mfG
mirage228

Pseudemys Nelsoni 22. Aug 2004 19:38

Re: reintroduce;
 
hoi mirage,

kann ich dann auch noch "inherited" verwenden um die vorfahrmethode aufzurufen?

btw:

das verstehe ich nicht, was wäre denn dann zwischen:

Zitat:

procedure DoActivate(Value: Boolean; TSSendDataRec: TTSSendDataRec); reintroduce; overload;
und:

Zitat:

procedure DoActivate(Value: Boolean; TSSendDataRec: TTSSendDataRec); overload;
noch für ein unterschied?

Chewie 22. Aug 2004 19:49

Re: reintroduce;
 
reintroduce und override zusammen schließen sich aus. Mit reintroduce erstellst du eine neue Methode mit einem bestimmten Namen, auch wenn es bereist eine virtuelle mit diesem gibt. Mit override überschreibst du aber eine virtuelle Methode. Es geht nur das ein oder das andere, aber nicht beides zusammen.

Chewie 22. Aug 2004 19:50

Re: reintroduce;
 
Zitat:

Zitat von Pseudemys Nelsoni
hoi mirage,

kann ich dann auch noch "inherited" verwenden um die vorfahrmethode aufzurufen?

btw:

das verstehe ich nicht, was wäre denn dann zwischen:

Zitat:

procedure DoActivate(Value: Boolean; TSSendDataRec: TTSSendDataRec); reintroduce; overload;
und:

Zitat:

procedure DoActivate(Value: Boolean; TSSendDataRec: TTSSendDataRec); overload;
noch für ein unterschied?

Bei ersterem wird die alte Methode überdeckt und existiert in der neuen Klassen nicht weiter, bei zweitem wird die neue Methode zusätzlich zu der anderen erstellt. Die alte kann aber weiterhin vererbt werden.

Pseudemys Nelsoni 22. Aug 2004 19:54

Re: reintroduce;
 
vielen dank, dann versteh ichs :mrgreen:

dann brauch ich reintroduce nichtmal ^^


oder auch nicht :roll: (verdammt aber auch -_-)

ich kann bei einer überladenen methode ja garkein inherited aufrufen... ...muss ich aber, gibts da keine möglichkeit?

Nothine 22. Aug 2004 22:01

Re: reintroduce;
 
ich hab als beispiel einfach mal die methode CopyToClipboard der TEdit-komponente "neugeschrieben", hab ihr einen parameter mehr verpasst und der compiler meckert nicht. nun ist die frage nur noch, ob du die alte prozedur (nach außen hin, der inherited aufruf ist sowieso möglich) behalten willst, oder ob auch die alte methode weiterhin aufgerufen werden können soll (is das deutsch? :roll:) soll die eigentliche methode nach außen hin nich mehr existieren lässt du sämtliche compiler-direktiven weg, soll die methode weiterhin aufrufbar sein fügst du ein overload hinten an, und fertig is das :zwinker: :mrgreen:

hier ma mein code zum veranschaulichen (und testen)
Delphi-Quellcode:
interface
  uses StdCtrls;

  type TEdit2 = class(TEdit)
  private
  protected
  public
    procedure CopyToClipboard(TextLength: Integer); overload;// reintroduce;
  published
  end;

implementation

  procedure TEdit2.CopyToClipboard(TextLength: Integer);
  var S: string;
  begin
    S := self.Text;
    self.Text := Copy(self.Text,1,TextLength);
    inherited CopyToClipboard;
    self.Text := S;
  end;

end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:50 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