Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Private-Methoden der Basisklasse überschreiben? (https://www.delphipraxis.net/100843-private-methoden-der-basisklasse-ueberschreiben.html)

little-x 4. Okt 2007 16:00


Private-Methoden der Basisklasse überschreiben?
 
Hallo,

ich habe ein eigenes Control (MyDBEdit) abgeleitet von DBEdit.

Ich habe ja den Quellcode von DBEdit, sehe daher auch die als PRivate deklarierten Methoden. Von denen müsste ich eine überschreiben. Was ich definitiv nicht machen werde ist, eine Kopie von TDBEdit machen und meine eigenen Änderungen rein. Wenn, dann muss es über Ableitung mit, override funktionieren.

Leider kommt die Fehlermeldung, dass die Funktion in der Basisklasse nicht gefunden wird. Das liegt wohl am Private.

Bevor ich den Gedanken für immer verwerfe: Kennt jemand irgendeine Möglichkeit, private Methoden zu überschreiben? Oder hat jemand dieses Problem schon mal originell (irgendwie anders) gelöst?

Viele Grüße...

Phoenix 4. Okt 2007 16:03

Re: Private-Methoden der Basisklasse überschreiben?
 
Private methoden lassen sich nicht überschreiben. Deswegen sind sie private.
Der Architekt der Klasse hat sich garantiert etwas dabei gedacht, als er diese Methoden so entworfen hat. An Deiner Stelle würde ich Dein Konzept noch einmal überdenken und hinterfragen, ob ein anderer Ansatz nicht geschickter wäre.

mkinzler 4. Okt 2007 16:04

Re: Private-Methoden der Basisklasse überschreiben?
 
private Deklarationen sind standardmässig bei der Ableitung nicht mehr sichtbar.
versuch ws mal mit reintroduce

Sidorion 4. Okt 2007 16:13

Re: Private-Methoden der Basisklasse überschreiben?
 
Nicht grundsätzlich. Alle Klassen innerhalb einer Unit gelten als 'friend' und können gegenseitig die privaten Member sehen. Private Member können von Nachfolgern in der selben Unit sehr wohl überschrieben werden, solange sie virtuell sind.
Dies fällt hier aber aus, da der nachfolger sicher nicht in der selben Unit steht.
Mit reintroduce wäre ich vorsichtig, da dies nicht zieht bei Zeiger auf Vorfahrenklasse.

Muetze1 4. Okt 2007 16:19

Re: Private-Methoden der Basisklasse überschreiben?
 
Zitat:

Zitat von Sidorion
Nicht grundsätzlich. Alle Klassen innerhalb einer Unit gelten als 'friend' und können gegenseitig die privaten Member sehen. Private Member können von Nachfolgern in der selben Unit sehr wohl überschrieben werden, solange sie virtuell sind.

Zwischen die Methoden "sehen" und sie überschreiben können, liegen Welten. Nur weil du die privaten Methoden durch das friend-Prinzip sehen, aufrufen etc kannst, akzeptiert der Compiler aber noch lange kein Überschreiben.

/EDIT: Ok, mein D5 akzeptiert und compiliert eine solche Konstruktion und setzt sie auch richtig um. Aber ich bin mir eigentlich sicher, dass sich das friend Prinzip nicht auf einen solchen Fall beziehen sollte.

dataspider 4. Okt 2007 16:22

Re: Private-Methoden der Basisklasse überschreiben?
 
Hi little-x,

ich hatte in einem anderem Forum mal ein Beispiel für das Überschreiben der Methode DataChange gepostet.
Vielleicht kannst du ja damit dein Problem lösen.
Allerdings würde ich einen anderen Ansatz ebenfalls immer vorziehen.

Cu, Frank


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