Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Lista genérica de objetos genericos (https://www.clubdelphi.com/foros/showthread.php?t=89223)

doctorhd 19-10-2015 00:39:26

Lista genérica de objetos genericos
 
Hola, precisamente lo del titulo, se puede implementar una lista genérica de objetos genéricos, donde:
Código Delphi [-]
var MiList:TList< T >
pueda almacenar objetos de distinto tipo:
Código Delphi [-]
Milist.Add(MiClass< String >);
Milist.Add(MiClass< Boolean >);
.....
Saludos...

Al González 19-10-2015 02:23:49

Hola doctorhd.

Muy cierta tu afirmación (con matices sobre la sintaxis). ^\||/

Sólo añadiría, para nuestros compañeros, que desde Delphi 2009 estas cosas son posibles gracias a diversas ampliaciones en la sintaxis de Object Pascal, en particular lo referente a genéricos. También conviene decir que la unidad System.Generics.Collections presenta una clase TObjectList < T > que cumple con esa funcionalidad. Aunque, si no se requiere restricción por clase, también puede utilizarse la tradicional TObjectList de System.Contnrs.

Un saludo.

Al González.

AgustinOrtu 19-10-2015 02:59:51

Sólo para ampliar lo que comenta Al, otra posibilidad es utilizar el framework Spring4D, el cual en su unidad Spring.Collections define un montón de bueno, colecciones genéricas

A mi punto de ver son mucho más poderosas que las que se incluyen en la RTL de Delphi, ya que por ejemplo son basadas en interfaces, y todas derivan de la interface IEnumerable<T>

Esta interface es sencillamente genial ya que provee un montón de métodos muy útiles. Por ejemplo, provee métodos como Where, Any, Skip, Take, TakeWhile..uff un montón

La idea es implementar colecciones estilo LINQ. Estos métodos reciben como argumento un predicado el cual es sencillamente una referencia a una función que retorna verdadero o falso (satisface o no el predicado)

De esta manera uno puede escribir código más limpio, (se me viene a la mente programación funcional), ya que uno se dedica a resolver su problema y no ensucia el código con interaciones para filtrar y obtener los elementos que necesita de una lista, simplemente se específica (aquí aparece la programación funcional) que objetos quiere (mediante un predicado) y luego ópera con ellos

Hay un vídeo o dos en youtube (y dos libros) de Nick Hodges en donde muestra en acción este framework

Y esta es sólo una de las bondades de Spring4D, hay muchísimas cosas interesantes para explotar de el

BDWONG 19-10-2015 03:15:34

Mira este codigo espero sea lo que buscas


Código Delphi [-]
uses
  SysUtils,  Generics.Collections   ;

var
 listaStrings:TList< string>;
 listaBooleans:TList< boolean>;

 listGenerica:TList< TObject>;
begin
//creamos los objetos
  listaStrings:=TList< string>.create;
  listaBooleans:=TList< boolean>.create;
  listGenerica:=TList< TObject>.create;
  try
     listaStrings.Add('soy un string');
     listaBooleans.Add(true);
     //anadimos las listas a a lista generica
     listGenerica.Add(listaStrings);
     listGenerica.Add(listaBooleans);

     Writeln(TList<string>(listGenerica[0]).First);//imprime  el string
     Writeln(TList< boolean>(listGenerica[1]).First);//imprime el booleano

  finally
  //liberamos los objetos
    listaStrings.Free;
    listaBooleans.Free;
    listGenerica.Free;
  end;
  Readln;
end.

saludos... :cool:


La franja horaria es GMT +2. Ahora son las 20:56:03.

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