FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Clases recursivas, ¿Como hacerlo?
Supongamos que tengo 3 .pas con 1 clase cada uno
La clase 1 contiene un objeto de clase 2 y otro de clase 3. La clase 2 no contiene nada relevante La clase 3 contiene un puntero del objeto de la clase 1. Al meter los uses de da error de redundancia como es de esperar, ¿Como puedo solucionar esto? ----------- file_1.pas -------------------------------------------- uses file_2, file_3; PC1 = ^TC1; TC1 = class f2 : TC2;end; ----------- file_2.pas -------------------------------------------- TC2 = class ...end; ----------- file_3.pas -------------------------------------------- uses file_1; TC3 = class ptrC1 : PC1end; |
#2
|
||||
|
||||
Hola a todos,
Una posible solución puede ser declarar los miembros como "TObject": tú sabes que el objeto será del tipo que sea, y, podrás hacer el "cast" correspondiente, pero, las unidades que declaren dicho tipo podrán ir en la claúsula "implementation", evitando el tipo de error que comentas. De todas formas, a ver si algún compañero puede dar alguna otra solución. Última edición por dec fecha: 23-09-2019 a las 21:57:56. |
#3
|
||||
|
||||
Cita:
Por otro lado, no entiendo la necesidad de PC1 = ^TC1;... |
#4
|
||||
|
||||
Hola.
Otra opción es usando interfaces, un ejemplo:
Hay que tener en cuenta que en la interface hay que declarar funciones y procedimientos para acceder o modificar las variables de la clase. Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#5
|
||||
|
||||
Creo que lo más sencillo es hacer esto:
Saludos. |
#6
|
|||
|
|||
Aqui el problema que tengo es que el uses debe ir en el interface ya que el TForm3 tiene una variable del tipo TForm1 por lo que si lo saco de la implementation y lo pongo en interface tengo el problema de los uses ciclicos
Cita:
|
#7
|
||||
|
||||
Ten en cuenta que clases recursivas muchas veces es un anti-patron.
Igual a que esas clases sean forms (deberias comunicar datos, no formularios). En Delphi, una manera elegante de resolverlo es con interfaces. Puedes implementar interfaces para comunicar datos y transpasar "fronteras" manteniendo los principios de SOLID. P.D: Algo que he aprendido luego de usar mas de 12 lenguajes es que cuando algo se hace "dificil" es, muchas veces, el mismo lenguaje indicando que hay otro camino mejor y mas idiomatico.
__________________
El malabarista. |
#8
|
|||
|
|||
Muchas gracias a todos, al final he encontrado la forma de sacarlo de interface y meterlo en implementacion, asi todo resuelto.
Gracias por el esfuerzo |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
como hacerlo?¿ | tiagor64 | Conexión con bases de datos | 4 | 09-02-2005 16:55:04 |
Como puede hacerlo? | Wascar | SQL | 2 | 27-12-2004 15:34:57 |
Cómo hacerlo ... | Jordy | Conexión con bases de datos | 2 | 19-08-2004 11:21:39 |
Cómo hacerlo instalable ? | K4RL0S | Varios | 1 | 03-01-2004 15:50:31 |
No se como hacerlo | apolo18 | Impresión | 4 | 20-05-2003 00:13:27 |
|