![]() |
dynamische Methode umbenennen
Moin,
bei Interfaces kann man doch sowas machen.
Delphi-Quellcode:
Aber für Objekte gibt es diese Möglichkeit doch bestimmt nicht?
IMeinInterface = Interface
function VorfahrFunktion: Integer; end; TMeinObjekt = class(TVorfahr, IMeinInterface) function IInterface.VorfahrFunktion = MeineFunktion function MeineMeine: Integer; end; 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. |
AW: dynamische Methode umbenennen
Was hätte das für einen Sinn? Oder geht es dir nur um das wie?
|
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. |
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.
|
AW: dynamische Methode umbenennen
Zitat:
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: |
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.
|
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: ![]() 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 03:27 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 by Thomas Breitkreuz