AGB  ·  Datenschutz  ·  Impressum  







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

reintroduce;

Ein Thema von Pseudemys Nelsoni · begonnen am 22. Aug 2004 · letzter Beitrag vom 22. Aug 2004
Antwort Antwort
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

reintroduce;

  Alt 22. Aug 2004, 19:28
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?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: reintroduce;

  Alt 22. Aug 2004, 19:34
Hi,

vielleicht ist die direktive overload angebrachter.

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#3

Re: reintroduce;

  Alt 22. Aug 2004, 19:38
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?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: reintroduce;

  Alt 22. Aug 2004, 19:49
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.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: reintroduce;

  Alt 22. Aug 2004, 19:50
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.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#6

Re: reintroduce;

  Alt 22. Aug 2004, 19:54
vielen dank, dann versteh ichs

dann brauch ich reintroduce nichtmal ^^


oder auch nicht (verdammt aber auch -_-)

ich kann bei einer überladenen methode ja garkein inherited aufrufen... ...muss ich aber, gibts da keine möglichkeit?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von Nothine
Nothine

Registriert seit: 3. Jul 2004
Ort: Mülheim an der Ruhr
198 Beiträge
 
Delphi 5 Enterprise
 
#7

Re: reintroduce;

  Alt 22. Aug 2004, 22:01
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? ) 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

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.
if ThisPost is senseless then
ThisPost.WasPostedBy := SomeoneElse();
  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 09:15 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