Razumijevanje pomagača klase Delphi (i snimanja) uvodi značajku jezika Delphi omogućavajući proširivanje definicije klase ili vrste zapisa dodavanjem funkcija i postupaka (metoda) u postojeće klase i zapise bez baština.
U verziji XE3 Delphi pomagači za snimanje postali su snažniji tako što su omogućili proširenje jednostavnih Delphi tipova kao što su žice, cijeli brojevi, enumi, skupovi i slično.
Sustav. SysUtils jedinica, iz Delphi XE3, implementira zapis pod nazivom "TStringHelper" koji je zapravo rekordni pomagač za žice.
Pomoću Delphi XE3 možete sastaviti i koristiti sljedeći kod:
var
s: string; početi
s: = 'Delphi XE3'; a. Zamijenite ('XE3', 'pravila', []). kraj;
Da bi to bilo moguće, napravljen je novi konstrukt u Delphiju "rekorder pomagač [jednostavnom tipu]". Za žice je ovo "upišite TStringHelper = pomagalo za snimanje niza". Naziv navodi "pomagač u snimanju", ali ne radi se o produženju ploče - radije o proširivanju jednostavnih vrsta poput nizova, cijelih brojeva i slično.
U sustavu i sustavu. SysUtils postoje i drugi unaprijed definirani pomagači za jednostavne tipove, uključujući: TSingleHelper, TDoubleHelper, TExtendedHelper, TGuidHelper (i nekoliko drugih). Iz imena možete dobiti ono što je jednostavna vrsta pomoćnika.
Postoje i neki zgodni pomagači otvorenog koda, poput TDateTimeHelper.
Enumerations? Pomoćnik za nabrajanje?
Nabrojavanja i skupovi koji se tretiraju kao jednostavni tipovi također se sada mogu (u XE3 i šire) proširiti funkcionalnostima koje vrsta zapisa može imati: funkcije, postupci i slično.
Evo jednostavnog nabrajanja ("TDay") i rekordnog pomagača:
tip
TDay = (ponedjeljak = 0, utorak, srijeda, četvrtak, petak, subota, nedjelja); TDayHelper = rekord pomagač za TDay. funkcija AsByte: bajt; funkcija ToString: niz; kraj;
funkcija TDayHelper. AsByte: bajt; početi
rezultat: = bajt (samo); kraj; funkcija TDayHelper. ToString: niz; početislučaj sam od
Ponedjeljak: rezultat: = 'Ponedjeljak'; Utorak: rezultat: = 'Utorak'; Srijeda: rezultat: = 'srijeda'; Četvrtak: rezultat: = 'četvrtak'; Petak: rezultat: = 'petak'; Subota: rezultat: = 'subota'; Nedjelja: rezultat: = 'Nedjelja'; kraj; kraj;
var
aDan: TDay; s: string; početi
aDan: = TDay. Ponedjeljak; s: = aDan. ToString. Spustiti; kraj;
Setovi? Pomoć za setove?
TDays = set od TDay;
var
dana: TDays; s: string; početi
dana: = [ponedjeljak.. Srijeda]; dana: = dani + [nedjelja]; kraj;
Ali kako bi bilo VELIKO da biste to mogli učiniti:
var
dana: TDays; b: boolov; početidana: = [ponedjeljak, utorak] b: = dana. Presijecajte ([ponedjeljak, četvrtak]).
tip
TDaysHelper = rekord pomagač za TDays. funkcija Sjecište (const dana: TDays): TDays; funkcija IsEmpty: boolean; kraj;... funkcija TDaysHelper. Sjecište (const dana: TDays): TDays; početi
rezultat: = samo * dana; kraj; funkcija TDaysHelper. IsEmpty: boolean; početi
rezultat: = samo = []; kraj;
Za svaki tip skupa sastavljen oko nabrajanja potreban vam je poseban pomoćnik jer nažalost nabrajanje i skupovi ne idu zajedno generičke i generičke vrste.
To znači da se ne može sastaviti sljedeće:
// NEMA KOMPILA ALIKE!
TGenericSet = skup od ;
Snimite pomoćnika za skup bajtova!
tip
TByteSet = set od Bajt; TByteSetHelper = rekord pomagač za TByteSet.
U definiciji TByteSetHelper možemo imati sljedeće:
javnostpostupak Čisto; postupak Uključi (const vrijednost: bajt); preopterećenje; u redu; postupak Uključi (const vrijednosti: TByteSet); preopterećenje; u redu; postupak Isključiti(const vrijednost: bajt); preopterećenje; u redu; postupak Isključiti(const vrijednosti: TByteSet); preopterećenje; u redu; funkcija Sjecište (const vrijednosti: TByteSet): TByteSet; u redu; funkcija IsEmpty: boolean; u redu; funkcija uključuje (const vrijednost: byte): boolean; preopterećenje; u redu;funkcija uključuje (const vrijednosti: TByteSet): boolean; preopterećenje; u redu;funkcija IsSuperSet (const vrijednosti: TByteSet): boolean; u redu; funkcija IsSubSet (const vrijednosti: TByteSet): boolean; u redu; funkcija equals (const vrijednosti: TByteSet): boolean; u redu; funkcija ToString: niz; u redu; kraj;
{TByteSetHelper}postupak TByteSetHelper. Uključi (vrijednost const: bajt); početi
Sustav. Uključiti (samo, vrijednost); kraj; postupak TByteSetHelper. Isključi (vrijednost const: bajt); početi
Sustav. Isključiti (sebe, vrijednost); kraj; postupak TByteSetHelper. Čisto; početi
samo: = []; kraj; funkcija TByteSetHelper. Jednake (vrijednosti const: TByteSet): boolean; početi
rezultat: = samo = vrijednosti; kraj; postupak TByteSetHelper. Isključi (vrijednosti const: TByteSet); početi
self: = samo-vrijednosti; kraj; postupak TByteSetHelper. Uključi (vrijednosti const: TByteSet); početi
samo: vrijednosti + vrijednosti; kraj; funkcija TByteSetHelper. Sadrži (vrijednosti const: TByteSet): boolean; početi
rezultat: = IsSuperSet (vrijednosti); kraj; funkcija TByteSetHelper. Presijecanje (vrijednosti const: TByteSet): TByteSet; početi
rezultat: = self * vrijednosti; kraj; funkcija TByteSetHelper. Sadrži (vrijednost const: bajt): boolean; početi
rezultat: = vrijednost u sebi; kraj; funkcija TByteSetHelper. IsEmpty: boolean; početi
rezultat: = samo = []; kraj; funkcija TByteSetHelper. IsSubSet (vrijednosti const: TByteSet): boolean; početi
rezultat: = samo <= vrijednosti; kraj; funkcija TByteSetHelper. IsSuperSet (vrijednosti const: TByteSet): boolean; početi
rezultat: = samo> = vrijednosti; kraj; funkcija TByteSetHelper. ToString: string; var
b: bajt; početiza b u sam čini
rezultat: = rezultat + IntToStr (b) + ','; rezultat: = Kopiraj (rezultat, 1, -2 + duljina (rezultat)); kraj;
var
daysAsByteSet: TByteSet; početi
daysAsByteSet. Čisto; daysAsByteSet. Uključi (ponedjeljak). AsByte); daysAsByteSet. Uključi (Integer (subota); daysAsByteSet. Uključi (bajt (TDay). Utorak)); daysAsByteSet. Uključi (Integer (TDay). Srijeda)); daysAsByteSet. Uključi (Integer (TDay). Srijeda)); // 2. put - nema smisla. daysAsByteSet. Isključite (TDay). Utorak. AsByte); ShowMessage (daniAsByteSet). ToString); ShowMessage (BoolToStr (daniAsByteSet). IsSuperSet ([ponedjeljak. AsByte, subota. AsByte]), istina)); kraj;
Postoji samo :(
Imajte na umu da TByteSet prihvaća bajtne vrijednosti - i svaka takva vrijednost bila bi prihvaćena ovdje. TByteSetHelper kao što je ranije implementirano nije strogo nabrojavanje (tj. Možete ga hraniti sa ne-TDay vrijednošću)... ali koliko sam svjestan.. meni djeluje.