Generics, een krachtige toevoeging aan Delphi, werden in Delphi 2009 geïntroduceerd als een nieuwe taalfunctie. Generieke of generieke typen (ook bekend als geparametriseerde typen), kunt u klassen definiëren die niet specifiek het type van bepaalde gegevensleden definiëren.
Als voorbeeld, in plaats van het type TObjectList te gebruiken om een lijst met alle objecttypen te hebben, van Delphi 2009, Merkloos product. De eenheid Collecties definieert een sterker getypte TObjectList.
Hier is een lijst met artikelen waarin generieke typen in Delphi worden uitgelegd met gebruiksvoorbeelden:
Generics worden soms generieke parameters genoemd, een naam waarmee ze iets beter kunnen worden ingevoerd. In tegenstelling tot een functieparameter (argument), die een waarde heeft, is een generieke parameter een type. En het parametreert een klasse, een interface, een record of, minder vaak, een methode ... Met als bonus anonieme routines en routineverwijzingen
Delphi tList, tStringList, tObjectlist of tCollection kunnen worden gebruikt om gespecialiseerde containers te bouwen, maar vereisen typecasting. Met Generics wordt casten vermeden en kan de compiler typefouten sneller herkennen.
Nadat u een klasse hebt geschreven met behulp van generieke typeparameters (generiek), kunt u die klasse gebruiken met elk type en het type dat u kiest voor elk gegeven gebruik van die klasse vervangt de generieke typen die u gebruikte toen u de klasse maakte.
De meeste voorbeelden die ik van Generics in Delphi heb gezien, gebruiken klassen die een generiek type bevatten. Terwijl ik aan een persoonlijk project werkte, besloot ik echter dat ik een interface wilde met een generiek type.
Zo definieert u een eenvoudige generieke klasse:
type
TGenericContainer = klasse
Waarde: T;
einde;
Met de volgende definitie kunt u als volgt een generieke container met een geheel getal en een reeks gebruiken:
var
generiekeInt: TGenericContainer;
generiekeStr: TGenericContainer;
beginnen
generiekeInt: = TGenericContainer.Create;
generiekeInt.Value: = 2009; // alleen gehele getallen
genericInt.Free;
genericStr: = TGenericContainer.Create;
genericStr.Value: = 'Delphi Generics'; // alleen tekenreeksen
genericStr.Free;
einde;
Het bovenstaande voorbeeld schetst alleen het oppervlak van het gebruik van Generics in Delphi (verklaart echter niets - maar bovenstaande artikelen hebben alles wat u wilt weten!).
Voor mij waren generieke geneesmiddelen de reden om over te stappen van Delphi 7/2007 naar Delphi 2009 (en nieuwer).