Ver Mensaje Individual
  #3  
Antiguo 13-07-2018
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Reputación: 11
bucanero Va camino a la fama
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); }
así que el compilador simplemente coge el primer método que encuentra en la lista que sea del tipo que busca, en este caso el definido para TINIFile.

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,

Código Delphi [-]

interface
type
  TAvIniFile = class(TIniFile)
  public
    // se marca el constructor como virtual para poder sobre-escribirlo mas adelante
    constructor Create(const FileName: string); overload; virtual; 
  end;

  TMyIniFile = class(TAvIniFile )
  private
  public
    constructor Create(const FileName: string); override; // ya si se puede usar el override
  end;

  TClassIniFile = class of TAvIniFile;

implementation

constructor TAvIniFile.Create(const FileName: string);
begin
  inherited;
  // aqui no es necesario insertar nada mas, solo esta definido para poder hacer override despues
end;

...

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
Gracias de nuevo por responder
Un saludo
Responder Con Cita