„Delphi“ įrašų pagalbininkai rinkiniams ir kitiems paprastiems tipams

click fraud protection

Suprasti „Delphi“ klasės (ir įrašų) pagalbininkus pristatoma „Delphi“ kalbos savybė, leidžianti išplėsti klasės ar įrašo tipo apibrėžimą, pridedant funkcijas ir procedūras (metodus) prie esamų klasių ir įrašų be paveldėjimas.

„XE3 Delphi“ versijoje įrašų pagalbininkai tapo galingesni, leisdami išplėsti paprastus „Delphi“ tipus, tokius kaip stygos, sveikieji skaičiai, sumos, rinkiniai ir panašiai.

Sistema. „SysUtils“ įrenginys iš „Delphi XE3“ įgyvendina įrašą pavadinimu „TStringHelper“, kuris iš tikrųjų yra stygų įrašų pagalbininkas.

Naudodami „Delphi XE3“ galite sudaryti ir naudoti kitą kodą:

var
s: styga; prasideda
s: = 'Delphi XE3'; s. Pakeisti („XE3“, „taisyklės“, []). „ToUpper“; galas; 

Kad tai būtų įmanoma, Delphi buvo pagamintas naujas statinys „[paprasto tipo] įrašymo pagalbininkas“. Styginiams tai yra „TStringHelper = stygos įrašymo pagalbininkas“. Pavadinime nurodoma „įrašyti pagalbininką“, tačiau tai nėra susiję su pratęsimu įrašai - verčiau pratęsti paprastus tipus, tokius kaip stygos, sveikieji skaičiai ir panašūs.

instagram viewer

Sistemoje ir sistemoje. „SysUtils“ yra ir kitų iš anksto nustatytų paprastų įrašų pagalbininkų, įskaitant: „TSingleHelper“, „TDoubleHelper“, „TExtendedHelper“, „TGuidHelper“ (ir keletą kitų). Iš pavadinimo galite sužinoti, kokį paprastą tipą pagalbininkas pratęsia.

Taip pat yra keletas naudingų atvirojo kodo pagalbininkų, pvz „TDateTimeHelper“.

Surašymai? Pagalbininkas išvardinimams?

surašymai
rinkiniai

Įrašai ir rinkiniai, kurie traktuojami kaip paprasti tipai, taip pat dabar (XE3 ir naujesnėse versijose) taip pat gali būti išplėsti, naudojant įrašo tipo funkcijas: funkcijas, procedūras ir panašiai.

Štai paprastas surašymas („TDay“) ir įrašymo pagalbininkas:

tipo
TDay = (pirmadienis = 0, antradienis, trečiadienis, ketvirtadienis, penktadienis, šeštadienis, sekmadienis); „TDayHelper“ = įrašyti pagalbininkas TDay. funkcija „AsByte“: baitas; funkcija „ToString“: stygos; galas; 
funkcija „TDayHelper“. „AsByte“: baitas; prasideda
rezultatas: = baitas (savęs); galas; funkcija „TDayHelper“. „ToString“: stygos; prasidedaatvejis savarankiškai apie
Pirmadienis: rezultatas: = 'pirmadienis'; Antradienis: rezultatas: = „Antradienis“; Trečiadienis: rezultatas: = 'Trečiadienis'; Ketvirtadienis: rezultatas: = 'Ketvirtadienis'; Penktadienis: rezultatas: = „penktadienis“; Šeštadienis: rezultatas: = 'šeštadienis'; Sekmadienis: rezultatas: = 'Sekmadienis'; galas; galas; 
var
aDay: TDay; s: styga; prasideda
„aDay“: = „TDay“. Pirmadienis; s: = diena. „ToString“. Sumažinti; galas; 
konvertuoti „Delphi Enum“ į styginių reprezentaciją

Rinkiniai? Pagalbininkas rinkiniams?

TDays = rinkinys TDay; 
var
dienos: TDays; s: styga; prasideda
dienos: = [pirmadienis.. Trečiadienis]; dienos: = dienos + [sekmadienis]; galas; 

BET, kaip puiku būtų tai padaryti:

var
dienos: TDays; b: boolean; prasidedadienos: = [pirmadienis, antradienis] b: = dienos. Sankryžoje ([pirmadienis, ketvirtadienis]).
tipo
„TDaysHelper“ = įrašyti pagalbininkas TD. funkcija Sankryža (const dienos: TDays): TDays; funkcija „IsEmpty“: boolean; galas;... funkcija „TDaysHelper“. Sankryža (const dienos: TDays): TDays; prasideda
rezultatas: = savęs * dienos; galas; funkcija „TDaysHelper“. „IsEmpty“: boolean; prasideda
rezultatas: = savęs = []; galas; 

Kiekvienam rinkinio tipui, pastatytam aplink sąrašą, jums reikės atskiro pagalbininko, nes, deja, sąrašai ir rinkiniai netaikomi generiniai ir generiniai tipai.

Tai reiškia, kad negalima sudaryti šių duomenų:

// JOKIŲ KOMPAKTINIŲ NETURI!
TGenericSet = rinkinys ; 
„TEnum“ paprasti generiniai vaistai „Enum“ pavyzdys

Įrašyti pagalbininkai baitų rinkinyje!

tipo
TByteSet = rinkinys Baitas; TByteSetHelper = įrašyti pagalbininkas „TByteSet“. 

„TByteSetHelper“ apibrėžime galime būti tokie:

viešaiprocedūra Skaidrus; procedūra Įtraukite (const vertė: baitas); perkrova; inline; procedūra Įtraukite (const reikšmės: TByteSet); perkrova; inline; procedūra Neįtraukti(const vertė: baitas); perkrova; inline; procedūra Neįtraukti(const reikšmės: TByteSet); perkrova; inline; funkcija Sankryža (const reikšmės: TByteSet): TByteSet; inline; funkcija „IsEmpty“: boolean; inline; funkcija Apima(const reikšmė: baitas): boolean; perkrova; inline;funkcija Apima(const reikšmės: TByteSet): boolean; perkrova; inline;funkcija „IsSuperSet“ (const reikšmės: TByteSet): boolean; inline; funkcija „IsSubSet“ (const reikšmės: TByteSet): boolean; inline; funkcija Lygus (const reikšmės: TByteSet): boolean; inline; funkcija „ToString“: stygos; inline; galas; 
{TByteSetHelper}procedūra „TByteSetHelper“. Įtraukite (const reikšmė: baitas); prasideda
Sistema. Įtraukite (save, vertę); galas; procedūra „TByteSetHelper“. Neįtraukti (const reikšmė: baitas); prasideda
Sistema. Išskirkite (save, vertę); galas; procedūra „TByteSetHelper“. Skaidrus; prasideda
savęs: = []; galas; funkcija „TByteSetHelper“. Lygus (const reikšmės: TByteSet): boolean; prasideda
rezultatas: = savęs = vertės; galas; procedūra „TByteSetHelper“. Neįtraukti (const reikšmės: TByteSet); prasideda
savęs: = savęs vertybės; galas; procedūra „TByteSetHelper“. Įtraukite (const reikšmės: TByteSet); prasideda
savęs: = savęs + vertybės; galas; funkcija „TByteSetHelper“. Apima (const reikšmės: TByteSet): boolean; prasideda
rezultatas: = IsSuperSet (reikšmės); galas; funkcija „TByteSetHelper“. Sankirtos (const reikšmės: TByteSet): TByteSet; prasideda
rezultatas: = savęs * vertybės; galas; funkcija „TByteSetHelper“. Apima (const reikšmė: baitas): boolean; prasideda
rezultatas: = vertė savyje; galas; funkcija „TByteSetHelper“. „IsEmpty“: boolean; prasideda
rezultatas: = savęs = []; galas; funkcija „TByteSetHelper“. IsSubSet (const reikšmės: TByteSet): boolean; prasideda
rezultatas: = savęs <= vertės; galas; funkcija „TByteSetHelper“. IsSuperSet (const reikšmės: TByteSet): boolean; prasideda
rezultatas: = savęs> = reikšmės; galas; funkcija „TByteSetHelper“. „ToString“: eilutė; var
b: baitas; prasidedadėl b į savarankiškai daryti
rezultatas: = rezultatas + IntToStr (b) + ','; rezultatas: = Kopijuoti (rezultatas, 1, -2 + ilgis (rezultatas)); galas; 
var
dienosAsByteSet: TByteSet; prasideda
dienos „AsByteSet“. Skaidrus; dienos „AsByteSet“. Įtraukite (pirmadienis). AsByte); dienos „AsByteSet“. Įtraukite (sveikasis skaičius (šeštadienis); dienos „AsByteSet“. Įtraukti (baitas („TDay“). Antradienis)); dienos „AsByteSet“. Įtraukti (sveikasis skaičius („TDay“). Trečiadienis)); dienos „AsByteSet“. Įtraukti (sveikasis skaičius („TDay“). Trečiadienis)); // 2 kartas - jokios prasmės. dienos „AsByteSet“. Neįtraukti (TDay. Antradienis. AsByte); „ShowMessage“ (dienos „AsByteSet“). ToString); „ShowMessage“ („BoolToStr“ (dienos „AsByteSet“). „IsSuperSet“ ([pirmadienis. „AsByte“, šeštadienis. AsByte]), tiesa)); galas; 

Yra, bet :(

Atminkite, kad „TByteSet“ priima baitų reikšmes - ir visos tokios vertės čia būtų priimamos. „TByteSetHelper“, kaip aprašyta aukščiau, nėra griežtas sąrašo tipas (t. Y. Galite jį pateikti ne su „TDay“ verte)... bet kol zinau.. man tai tinka.

instagram story viewer