Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Methode überschreiben + zusätzlicher parameter (https://www.delphipraxis.net/28174-methode-ueberschreiben-zusaetzlicher-parameter.html)

Pseudemys Nelsoni 20. Aug 2004 13:15


Methode überschreiben + zusätzlicher parameter
 
moin,

wie kann ich denn eine methode einer klasse überschreiben und einen zusätzlichen parameter noch mitgeben?

wenn die methode der vorgänger klasse sagen wir mal so aussieht:

Delphi-Quellcode:
procedure SendData(param1: Typ1); virtual;
und dann möchte ich in der nachfolgerklasse folgendes machen:

Delphi-Quellcode:
procedure SendData(param1: Typ1, param2: typ2); override;

...

procedure TMyClass.SendData(param1: Typ1, param2: typ2);
begin
  inherited;
  // und halt weiteres tun...
end;

ist das möglich? muss ja irgendwie, ich möchte nämlich ein record übergeben

Dannyboy 20. Aug 2004 13:19

Re: Methode überschreiben + zusätzlicher parameter
 
Hallo Pseudemys Nelsoni,
was genau klappt an Deinem Beipiel nicht,
wo hakt's denn? :gruebel:

nailor 20. Aug 2004 13:20

Re: Methode überschreiben + zusätzlicher parameter
 
wenn du beide haben willst, dann pack ein overload dahinter (sollte auch im nachhinein noch klappen). brauchst du das ursprüngliche nicht mehr, könnte es mit reintroduce klappen, wobei ich nicht weiß, wie der zu einer änderung der parameterzahl steht.

Pseudemys Nelsoni 20. Aug 2004 13:26

Re: Methode überschreiben + zusätzlicher parameter
 
Moin,

Zitat:

was genau klappt an Deinem Beipiel nicht,
sag ich gleich :mrgreen:

Zitat:

wenn du beide haben willst, dann pack ein overload dahinter
das ist ja das problem, original sieht die methode der vorgänger klasse so aus:

Delphi-Quellcode:
procedure DoActivate(Value: Boolean); override;
wenn ich nun aber überschreiben will und einfach einen paremeter hinzufüge:

Delphi-Quellcode:
procedure DoActivate(Value: Boolean; TSSendDataRec: TTSSendDataRec); override;
kommt:

Zitat:

[Fehler] tsSocketClass.pas(10): Deklaration von 'DoActivate' unterscheidet sich von vorheriger Deklaration
:\

was kann ich denn noch versuchen?

Chewie 20. Aug 2004 13:37

Re: Methode überschreiben + zusätzlicher parameter
 
Überschriebene Methoden müssen die gleichen Parameter haben. Da wirste so wenig machen können. Ich würd an deiner Stelle mein Konzept überdenken. Was genau hast du vor?

Pseudemys Nelsoni 20. Aug 2004 13:40

Re: Methode überschreiben + zusätzlicher parameter
 
ich habe eine Klasse von TClientSocket abgeleitet, wenn also eine verbindung besteht(doactivate) möchte ich von der klasse heraus schon daten an den server senden...nur weiss ich nicht wie... das überschreiben von DoActivate(+parameter, was wohl nicht geht) macht mir genau solche probleme wie beim versuch ein ereignis (geht das überhaupt?)wie "OnConnect" zu überschreiben... :?

Edit: Hab statt 2ten parameter der funktion lieber n neues feld genommen. mal sehn obs so alles geht

Marcel Gascoyne 20. Aug 2004 14:02

Re: Methode überschreiben + zusätzlicher parameter
 
Zitat:

Zitat von Pseudemys Nelsoni
moin,

wie kann ich denn eine methode einer klasse überschreiben und einen zusätzlichen parameter noch mitgeben?

Du musst die neue Methode mit reintroduce und overload definieren, z.b. so:

Delphi-Quellcode:
type
  TVorfahr = class(TObject)
  public
    procedure SendData(param1: Typ1; param2: Typ2); virtual;
  end;

  TNachfahr = class(TVorfahr)
  public
    procedure SendData(param1: Typ1; param2: Typ2; param3: Typ3); reintroduce; overload;
  end;

procedure TVorfahr.SendData(param1: Typ1; param2: Typ2);
begin
 ...
end;

procedure TNachfahr.SendData(param1: Typ1; param2: Typ2; param3: Typ3);
begin
  inherited SendData(param1,param2);
  ...
end;
Gruß,
Marcel

Pseudemys Nelsoni 20. Aug 2004 14:23

Re: Methode überschreiben + zusätzlicher parameter
 
ahhh, vielen dank :)

noch eine frage dazu:

Zitat:

procedure TVorfahr.SendData(param1: Typ1; param2: Typ2);
begin
...
end;

procedure TNachfahr.SendData(param1: Typ1; param2: Typ2; param3: Typ3);
begin
inherited SendData(param1,param2);
...
end;
käme das inhertied nicht in die erste prozedur?

Chewie 20. Aug 2004 14:24

Re: Methode überschreiben + zusätzlicher parameter
 
Zitat:

Zitat von Pseudemys Nelsoni
käme das inhertied nicht in die erste prozedur?


Nein, wieso denn? inherited hast immer mit der Vorfahrklasse zu tun. Du greifst ja vom Nachfahren auf den Vorfahren zu und nicht umgekehrt.

Pseudemys Nelsoni 20. Aug 2004 14:29

Re: Methode überschreiben + zusätzlicher parameter
 
achsoooo, schon klar, hab garnicht gelesen das das der vorfahr ist. hab mich auch schon gewundert wieso der nachfahre 2mal die gleiche prozedur (mit unterschiedlichen parametern) hat. :oops:

danke =)


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