Cita:
Empezado por DANY
...La idea es aprovechar al maximo el polimorfismo de las clases en la herencia visual, para ello hago lo siguiente...
|
Me da la impresión de que el polimorfismo es otra cosa, pero bueno, creo que te he entendido.
Cita:
Empezado por DANY
... Hasta ahi todo magnifico, pero que hago cuando por ej tengo que recorrer una grilla e ir insertando registros...
Código Delphi [-]
THijo (Registro).GetDatos (...)
...
El problema es que recien hay es donde se los valores que le tengo que pasar a la funcion GetDatos dado que depende de lo cargado por el usuario en la grilla. Como solucion estoy desaprovechando la potencia del polimorfismo y estoy replicado codigo cada vez que me encuentro con una grilla.
|
Yo lo resuelvo utilizando un apuntador a la clase y métodos de clase; Ese apuntador debes pasarlo al formulario de Grid genérico, de esa forma puedes acceder al método de cada clase sin definirla en ese punto. Creo que mejor con un ejemplo:
Código Delphi
[-]
TBase = class(TObject)
public
class function GetDatos():String; virtual; abstract;
end;
THijo1 = class(TBase)
public
class function GetDatos():String; override;
end;
THijo2 = class(TBase)
public
class function GetDatos():String; override;
end;
TBaseClass = class of TBase;
... (implementación)
Class function THijo1.GetDatos: String;
begin
(NOTA1)
Result := 'Hijo1'; end;
Class function THijo2.GetDatos: String;
begin
(NOTA2)
Result := 'Hijo2';
end;
Cuando llames al formulario de Grid, como tú bien dices no puedes hacer referencia a las clases THijo1, THijo2,...
Lo que debes hacer es pasar la referencia a la Clase:
Código Delphi
[-]
Form2.AClass := THijo1;
Form2.Show;
...
Form2.AClass := THijo2;
Form2.Show;
y el el formulario habrás definido la propiedad como:
public
property AClass:TBaseClass read FAClass write FAClass;
De ésta forma en ese formulario puedes ejecutar la siguiente línea:
Código Delphi
[-]
El equivalente a la línea
será ésta:
Str := AClass.GetDatos;
Espero haberme explicado bien.