Cita:
Empezado por marto
Y como bien se ha comentado, eso no se puede hacer en Delphi.
|
Bueno, puede hacerse con GetClass pero la clase debe estar previemente registrada con RegisterClass que, a fin de cuentas viene a ser el registro en la fábrica.
Por otro lado la implementación que esboza
mamcx no se me hace particularmente complicada o no veo forma de reducirla mucho.
De cualquier manera aprovecho este hilo para copiar la fábrica que menciona
Federico del otro hilo:
Código Delphi
[-]
unit fab;
interface
uses
Classes, Forms;
type
TFabrica = class
private
Lista : TStringList;
function GetClase(Nombre: String): TFormClass;
public
property Clases[Nombre: String]: TFormClass read GetClase; default;
constructor Create;
destructor Destroy; override;
procedure Registrar(Clase: TFormClass);
end;
var
Fabrica: TFabrica;
implementation
constructor TFabrica.Create;
begin
inherited;
Lista := TStringList.Create;
end;
destructor TFabrica.Destroy;
begin
Lista.Free;
inherited;
end;
procedure TFabrica.Registrar(Clase: TFormClass);
var
I : Integer;
begin
I := Lista.IndexOf(Clase.ClassName);
if I = -1 then Lista.AddObject(Clase.ClassName, TObject(Clase));
end;
function TFabrica.GetClase(Nombre: String): TFormClass;
var
I : Integer;
begin
I := Lista.IndexOf(Nombre);
Assert(I <> -1, 'Clase no registrada');
Result := TFormClass(Lista.Objects[i]);
end;
initialization
Fabrica := TFabrica.Create;
finalization
Fabrica.Free;
end.
ya que en el hilo original han aparecido montones de líneas en blanco.
Está pensada para formularios pero se puede adaptar a otras clases base.
// Saludos