Zrozumienie typów generycznych w Delphi

Dowiedz się, jak sparametryzować swoje rekordy i typy

Widok przez ramię na programowanie człowieka na komputerach w biurze kreatywnym

Maskot / Getty Images





Generics, potężny dodatek do Delphi, został wprowadzony w Delphi 2009 jako nowa funkcja językowa. Generyki lub typy ogólne (znane również jako typy parametryczne ), umożliwiają zdefiniowanie klas, które nie definiują konkretnie typu niektórych członków danych.

Jako przykład, zamiast używać typu TObjectList do posiadania listy dowolnych typów obiektów, z Delphi 2009, Generyki. Jednostka kolekcji definiuje silniej typizowany TObjectList.



Oto lista artykułów wyjaśniających typy generyczne w Delphi z przykładami użycia:

Co, dlaczego i jak na generykach w Delphi

Generics z Delphi 2009 Win32

Generyki są czasami nazywane parametrami generycznymi, nazwą, która pozwala je nieco lepiej wprowadzić. W przeciwieństwie do parametru funkcji (argumentu), który ma wartość, parametr ogólny jest typem. I parametryzuje klasę, interfejs, rekord lub, rzadziej, metodę ... Z, jako bonus, anonimowe procedury i odwołania do procedur



Samouczek Delphi Generics

Delphi tList, tStringList, tObjectlist lub tCollection mogą być użyte do budowy wyspecjalizowanych kontenerów, ale wymagają rzutowania typów. Dzięki Generics unika się rzutowania, a kompilator może szybciej wykryć błędy typu.

Używanie generyków w Delphi

Po napisaniu klasy przy użyciu parametrów typu ogólnego (ogólnych), możesz użyć tej klasy z dowolnym typem, a typ, który zdecydujesz się użyć z dowolnym użyciem tej klasy, zastąpi typy ogólne użyte podczas tworzenia klasy.

Ogólne interfejsy w Delphi

Większość przykładów Generics, które widziałem w Delphi, używa klas zawierających typ generyczny. Jednak podczas pracy nad osobistym projektem zdecydowałem, że chcę mieć interfejs zawierający typ ogólny.

Przykład prostego typu generycznego

Oto jak zdefiniować prostą klasę generyczną:



rodzaj
TGenericContainer = klasa
Wartość : T;
koniec ;

Z następującą definicją, oto jak używać ogólnego kontenera liczb całkowitych i ciągów:

był
genericInt : TGenericContainer;
genericStr : TGenericContainer;
zaczynać
genericInt := TGenericContainer.Create;
genericInt.Value := 2009; //tylko liczby całkowite
genericInt.Free;
genericStr := TGenericContainer.Create;
genericStr.Value := 'Delphi Generics'; //tylko ciągi
genericStr.Free;
koniec ;

Powyższy przykład tylko zarysowuje powierzchnię używania Generics w Delphi (choć niczego nie wyjaśnia - ale powyższe artykuły zawierają wszystko, co chcesz wiedzieć!).



Dla mnie generyki były powodem przejścia z Delphi 7/2007 do Delphi 2009 (i nowszych).