Generics, una potente aggiunta a Delphi, è stata introdotta in Delphi 2009 come una nuova funzionalità linguistica. Generici o tipi generici (noto anche come tipi parametrizzati), consentono di definire classi che non definiscono in modo specifico il tipo di determinati membri dei dati.
Ad esempio, invece di utilizzare il tipo TObjectList per avere un elenco di qualsiasi tipo di oggetto, da Delphi 2009, il Generics. L'unità Collezioni definisce un TObjectList più fortemente tipizzato.
Ecco un elenco di articoli che spiegano i tipi generici in Delphi con esempi di utilizzo:
I generici sono talvolta chiamati parametri generici, un nome che consente di introdurli in qualche modo meglio. A differenza di un parametro di funzione (argomento), che ha un valore, un parametro generico è un tipo. E parametrizza una classe, un'interfaccia, un record o, meno frequentemente, un metodo ... Con, come bonus, routine anonime e riferimenti di routine
Delphi tList, tStringList, tObjectlist o tCollection possono essere utilizzati per creare contenitori specializzati, ma richiedono la tipografia. Con Generics, il cast viene evitato e il compilatore può individuare prima gli errori di tipo.
Dopo aver scritto una classe utilizzando parametri di tipo generico (generici), è possibile utilizzare quella classe con qualsiasi tipo e il tipo che si sceglie di utilizzare con un determinato uso di quella classe sostituisce i tipi generici utilizzati durante la creazione della classe.
La maggior parte degli esempi che ho visto di Generics in Delphi usano classi contenenti un tipo generico. Tuttavia, mentre lavoravo a un progetto personale, ho deciso che volevo un'interfaccia contenente un tipo generico.
Ecco come definire una semplice classe generica:
genere
TGenericContainer = classe
Valore: T;
fine;
Con la seguente definizione, ecco come utilizzare un contenitore generico intero e stringa:
var
genericInt: TGenericContainer;
genericStr: TGenericContainer;
inizio
genericInt: = TGenericContainer.Create;
genericInt.Value: = 2009; // solo numeri interi
genericInt.Free;
genericStr: = TGenericContainer.Create;
genericStr.Value: = 'Delphi Generics'; // solo stringhe
genericStr.Free;
fine;
L'esempio sopra non fa altro che graffiare la superficie dell'utilizzo di Generics in Delphi (non spiega nulla però - ma gli articoli sopra hanno tutto ciò che vuoi sapere!).
Per me, i generici sono stati il motivo per passare da Delphi 7/2007 a Delphi 2009 (e più recenti).