Hola a todos tengo en siguiente problema: Cree una clase que acepta un parámetro de tipo genérico <T>, la idea de este parámetro es que acepte clases que descienden de una clase en común, lo cual también podría definirse de este tipo <t:class>, para acotar su definición. El problema que tengo es como acceder a los campos que tiene el parámetro <T>, ya que este representa la clase que es pasada. Para que quede mas claro detallo el código:
Código Delphi
[-]
type
TDomain = class
private
FName:String;
FTipoSQL:TFieldType;
FLenFieldIn:Integer;
FLenFieldOut:Integer;
protected
constructor Create(const AName:String; ATipoSQL:TFieldType; ALenFieldIn:Integer; ALenFieldOut:Integer);
public
destructor Destroy; override;
public
property Name:String read FName;
property TipoSQL:TFieldType read FTipoSQL;
property LenFieldIn:Integer read FLenFieldIn;
property LenFieldOut:Integer read FLenFieldOut;
end;
type
TField(T:class,constructor)= class
private
FNameField:String;
FNameIn:String;
FNameOut:String;
FDomain:T;
private
function getNamesIn(const Index:Integer):String;
function getNamesOut(const Index:Integer):String;
function SepararCadena(const Cadena: string; const Delim: Char): TStringList;
procedure setDomain(ADomain:T);
protected
constructor Create(const ANameField:String; ANameIn:String; ANameOut:String; ADomain:T);
public
destructor Destroy; override;
public
property NameField: String read FNameField;
property NameIn: String read FNameIn;
property NameOut: String read FNameOut;
property NamesIn[const Index: Integer]:String read getNamesIn;
property NamesOut[const Index: Integer]:String read getNamesOut;
property Domain:T read FDomain;
end;
procedure TField(T.setDomain)(ADomain:T);
begin
FDomain:=T(GetTypeData(PTypeInfo(TypeInfo(T)))^.ClassType.Create);
FDomain.FTipoSQL:=ADomain.TipoSQL;
FDomain.FLenFieldIn:=ADomain.LenFieldIn;
FDomain.FLenFieldOut:=ADomain.LenFieldOut;
end;
Como ven la clase recibe un parámetro <T> que es asignado a FDomain. Esta asignación necesito hacerla campo a campo (clonar el objeto). Me imagino que el compilador al no saber que tipo de parámetro sera pasado no admite especificar sus campos en forma literal, pero debe existir alguna forma de invocarlos....
nota:Cambie <> por (), ya que las etiquetas de código Delphi no lo muestran.
Saludos...