Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   dynamische Methode umbenennen (https://www.delphipraxis.net/164271-dynamische-methode-umbenennen.html)

himitsu 5. Nov 2011 15:36

dynamische Methode umbenennen
 
Moin,

bei Interfaces kann man doch sowas machen.
Delphi-Quellcode:
IMeinInterface = Interface
  function VorfahrFunktion: Integer;
end;

TMeinObjekt = class(TVorfahr, IMeinInterface)
  function IInterface.VorfahrFunktion = MeineFunktion
  function MeineMeine: Integer;
end;
Aber für Objekte gibt es diese Möglichkeit doch bestimmt nicht?
Also, wo man eine virtuelle Funktion überschreiben kann, aber unter anderem Namen ... quasi daß man da die Adresse der VMT mit in der Deklaration angibt oder so.


Einen Umweg, über eine Zwischenklasse hätte ich ja, aber wenn es einen direkten Weg gäbe ... vielleicht gibt's ja einen, also ohne die RTTI nachträglich umzubiegen und die VMT zu ändern oder eben ohne eine zustäzliche Klasse.

Furtbichler 5. Nov 2011 15:40

AW: dynamische Methode umbenennen
 
Was hätte das für einen Sinn? Oder geht es dir nur um das wie?

himitsu 5. Nov 2011 15:51

AW: dynamische Methode umbenennen
 
Es geht darum, sicherzustellen, daß eine gewisse Reihenfolge in den Methodenaufrufen eintritt, egal wer wie dann nachher diese Methode überschreibt.

Also eine "kurze" Unterbrecheung in der Vererbungslinie.
Es geht auf soetwas Ähnliches hinaus, wie ein Singletonpattern.

Das Ergebnis wird demnächst hier vorgestellt.

Stevie 5. Nov 2011 18:00

AW: dynamische Methode umbenennen
 
Für Interfaces gibts das, um Namenskollisionen beim Implementieren mehrerer Interfaces behandeln zu können. Da Delphi aber keine Mehrfachvererbung hat, braucht man das auch nicht.

himitsu 5. Nov 2011 19:05

AW: dynamische Methode umbenennen
 
Zitat:

Zitat von Stevie (Beitrag 1134617)
Da Delphi aber keine Mehrfachvererbung hat, braucht man das auch nicht.

Schade eigentlich?

Aber OK, wenn man sich den Aufbau und die Methode der Vererbung ansieht, ist es klar, warum es das so nicht geben kann.


Nja, wäre halt zu schön gewesen, aber war mir fast schon klar :angle2:

Uwe Raabe 6. Nov 2011 00:39

AW: dynamische Methode umbenennen
 
Es wird dir zwar nicht helfen, aber sowas geht nur mit message-Methoden. Die werden lediglich über die Message-ID bestimmt - der Name ist dabei egal.

himitsu 6. Nov 2011 09:31

AW: dynamische Methode umbenennen
 
Nja, beide Methoden werden erstmal grundsätzlich gleich behandelt.

Message-Methoden bekommen einen positiven Index (in der RTTI)
und virtuelle Methoden einen negativen Index + einen Eintrag in der VMT (virtual method table), an der Stelle des genannten Indize.

So:
http://www.delphipraxis.net/164278-i...n-mischen.html
Würde man Methoden umbenannt überschreiben können und und würde mn über die (direkte) weitere Verwendung der Referenz (ob als Objekt oder Interface) informiert werden, wäre des Deklarationen einfacher und der Code, sowie die Deklarationen bestimmt nur noch halb so groß. *heul*



Bei meinem Code, wo dieses eingesetzt werden soll, geht es darum, daß ich freme Interfaces in Objekten kapsle und eigene Objekte, als Interface, an jemand Anderes übergebe,
auf meiner Seite aber alles vorwiegend nur als Objekte verwenden möchte, ohne jetzt alles doppelt erstellen/verwalten zu müssen.

Im Prinzip müßte ich die für eigenen Objekte auch teilweise ein Interface erstellen, dazu dann immer die interne Klasse und dann nochmals eine Klasee für meine objektweise Verwaltung/Kapselung.
So brauche ich aber nur die eine Klasse.
Und das werden leider eine ganze Menge werden.


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