![]() |
Referencia al objeto desde la interfaz
Hola!!!
Supongamos que tenemos un método del siguiente estilo: Código:
procedure Add(o: IMyInterface); Código:
procedure TMiClasse.Add(o: IMyInterface); En fin... estoy empezando a programar con interfaces en Delphi (en java la cosa no es tan complicada) y supongo que estoy cometiendo algun error conceptual, así que estoy abierto a todas vuestras explicaciones... |
Hasta donde entiendo esto no es posible. No al menos de una manera ortodoxa. El meollo de las interfaces es precisamente que el código que se escriba no dependa de los objetos que las implementan.
La manera en que yo he hecho esto es usando una interfaz y un objeto que la implemente como base de todas las demás interfaces que utilice: Código:
type Algo curioso que supe cuando investigué esto es que de hecho puedes omitir la línea (la única línea) del código de la función TMySelf._Self y aún así funciona. Esto es así porque el registro del CPU que Delphi utiliza para almacenar el parámetro "escondido" Self es el mismo que utiliza para devolver el resultado de una función. Prueba esto a ver si te funciona. El problema será si intentas encontrar el objeto implementador de interfaces que no programaste tú. Yo tengo la sospecha de que aún así puede hacerse si se conoce la estructura de la VMT de un objeto para localizar la dirección del objeto a partir de la direción de la interfaz que no es, a fin de cuentas, otra cosa que un puntero. Habrá que leerse con detalle el libro de Ray Lischner, Delphi in a nut-shell // Saludos |
Si, si que me sirve la idea. Lo que quiero hacer es una especie de TObjectList, pero pueda ordenarse dado un criterio. Seguiré trabajando en ello y si consigo algo presentable te lo comento.
|
La franja horaria es GMT +2. Ahora son las 02:00:02. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi