FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Hola Neftali, gracias por responder!!
Si después de unas cuantas pruebas llegue a esa misma conclusión, el problema se encuentra en esta definición class of TInifile que es la que determina el orden de búsqueda, y es que al no poder hacer override sobre el constructor por que la clase padre no lo permite, si el compilador se encuentra con varias clases constructoras declaradas de forma idéntica, entonces la búsqueda de procesos la realiza internamente a algo parecido a una lista con esta forma: Código:
1:TINIFile{ constructor Create(const FileName: string); } 2: Resto de clases ascendentes a TINIFile ... N:TMyIniFile { constructor Create(const FileName: string); } Y lo solucione creando una clase intermedia (TAvIniFile) donde se define el constructor de forma virtual para así poder sobre-escribirlo en las clases descendientes,
y finalmente sustituyo la declaración de classInifile por TclassInifile = class of TAvInifile, de esta forma la lista de búsqueda quedaría así: Código:
1: clases descendientes a TAvIniFile con el constructor sobre-escrito, aquí se incluye TMyIniFile 2: TAvIniFile{ constructor Create(const FileName: string); } 3: TINIFile{ constructor Create(const FileName: string); } 4: Resto de clases ascendentes a TINIFile Un saludo |
#2
|
||||
|
||||
Hola a todos,
Ha estado bien visto esto último, bucanero. Yo, en mi ignorancia, iba a responder de entrada que el método constructor de tu clase INI tenía que ser "override" y no "overload". Pero, al probarlo aquí, me dí cuenta de que no era tan sencillo como hacer esto... no alcancé yo hasta donde llegó el compañero Neftalí, que fue descubrir que el constructor de la clase TIniFile no puede sobrescribirse. Vamos, ni alcabcé yo donde el Neftalí llegó, ni por supuesto se me ocurrió pensar en hacer lo que tú al final has hecho. Está bien saberlo. |
#3
|
||||
|
||||
Cita:
Si, yo también me di cuenta del cambio de palabra overload/override David, pero el problema está en la definición de las clases base, que como he dicho no están definidas para que se puedan "sobreescribir". Como bien dices, al realizar el cambio da el error de "Cannot override a non-virtual method".
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#4
|
|||
|
|||
Gracias DEC y movorack por responder
Cita:
En cuanto al reintroduce también lo intente y el resultado fue el mismo. En tu código te ha funcionado porque has llamado directamente al método create de la clase TMyIniFile, y de este modo incluso con el overload funciona Cita:
Gracias a todos por dedicarle tiempo a esta cuestión Un saludo |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Crear objetos mediante su clase | coso | Trucos | 0 | 05-12-2008 23:37:15 |
duda al crear un descendiente de tpanel | hibero | OOP | 1 | 23-05-2008 21:07:52 |
problema crear dll con clase | rzf1983 | Varios | 9 | 08-11-2007 22:56:52 |
crear un evento en una clase? | chelox | OOP | 4 | 06-06-2007 20:14:20 |
Crear clase. Basico de POO. | DarkByte | OOP | 17 | 24-08-2005 17:37:21 |
|