Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-10-2015
doctorhd doctorhd is offline
Miembro
NULL
 
Registrado: abr 2013
Posts: 48
Poder: 0
doctorhd Va por buen camino
Tipos Genericos

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 [-]
{Clase base que puede ser pasada como parámetro genérico a TField}
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;

{Clase que recibe el parámetro de tipo genérico}
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;


{Procedimiento en donde necesito acceder a los campos de la clase que es pasada como parámetro}
procedure TField(T.setDomain)(ADomain:T);
begin
  {Creamos el objeto Domain o sus descendientes}
  FDomain:=T(GetTypeData(PTypeInfo(TypeInfo(T)))^.ClassType.Create);

  {Aqui el problema, el compilador no reconoce los campos}
  FDomain.FTipoSQL:=ADomain.TipoSQL;
  FDomain.FLenFieldIn:=ADomain.LenFieldIn;
  FDomain.FLenFieldOut:=ADomain.LenFieldOut;
end;{procedure}
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...
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Class Helpers sobre Genericos.. yapt OOP 1 24-04-2011 16:06:17
Procedures Genericos con Parametros de Controles.... Kenobi Varios 23 21-11-2007 00:42:41
Listbox con items genericos ANG4L Varios 2 11-05-2006 03:54:37
Parametros sql genericos AbcXxx Conexión con bases de datos 2 10-11-2005 00:31:59
... 100 tipos... Jure Humor 0 18-03-2004 14:24:30


La franja horaria es GMT +2. Ahora son las 10:12:12.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi