Comprender los tipos genéricos en Delphi

Los genéricos, una poderosa adición a Delphi, se introdujeron en Delphi 2009 como una nueva característica del lenguaje. Tipos genéricos o genéricos (también conocidos como tipos parametrizados), le permiten definir clases que no definen específicamente el tipo de ciertos miembros de datos.

Como ejemplo, en lugar de usar el tipo TObjectList para tener una lista de cualquier tipo de objeto, desde Delphi 2009, el Genéricos. La unidad de colecciones define una TObjectList más fuertemente tipada.

Aquí hay una lista de artículos que explican los tipos genéricos en Delphi con ejemplos de uso:

Qué y por qué y cómo en genéricos en Delphi

Genéricos con Delphi 2009 Win32

Los genéricos a veces se denominan parámetros genéricos, un nombre que permite introducirlos algo mejor. A diferencia de un parámetro de función (argumento), que tiene un valor, un parámetro genérico es un tipo. Y parametriza una clase, una interfaz, un registro o, con menos frecuencia, un método ... Con, como bonificación, rutinas anónimas y referencias de rutina.

Tutorial de Delphi Generics

Delphi tList, tStringList, tObjectlist o tCollection se pueden usar para crear contenedores especializados, pero requieren conversión de texto. Con Generics, se evita la conversión y el compilador puede detectar errores de tipo antes.

Usando genéricos en Delphi

Una vez que haya escrito una clase usando parámetros de tipo genérico (genéricos), puede usar esa clase con cualquier tipo y el tipo que elija usar con cualquier uso dado de esa clase reemplaza los tipos genéricos que usó cuando creó la clase.

Interfaces Genéricas en Delphi

La mayoría de los ejemplos que he visto de genéricos en Delphi usan clases que contienen un tipo genérico. Sin embargo, mientras trabajaba en un proyecto personal, decidí que quería una interfaz que contenga un tipo genérico.

Ejemplo de tipo genérico simple

Aquí se explica cómo definir una clase genérica simple:

tipo
TGenericContainer = clase
Valor: T;
final;

Con la siguiente definición, aquí se explica cómo usar un contenedor genérico de enteros y cadenas:

var
genericInt: TGenericContainer;
genericStr: TGenericContainer;
empezar
genericInt: = TGenericContainer.Create;
genericInt.Value: = 2009; // solo enteros
genericInt.Free;
genericStr: = TGenericContainer.Create;
genericStr.Value: = 'Delphi Generics'; // solo cadenas
genericStr.Free;
final;

El ejemplo anterior solo rasca la superficie del uso de genéricos en Delphi (aunque no explica nada, ¡pero los artículos anteriores tienen todo lo que quieres saber!).

Para mí, los genéricos fueron la razón para pasar de Delphi 7/2007 a Delphi 2009 (y más reciente).