Izpratne par Delphi klases (un ierakstu) palīgiem ievieš Delphi valodas funkciju, kas ļauj paplašināt klases vai ieraksta veida definīciju, pievienojot funkcijām un procedūras (metodes) esošajām klasēm un ierakstiem bez mantojums.
XE3 Delphi versijā ierakstu palīgi kļuva jaudīgāki, ļaujot paplašināt vienkāršus Delphi tipus, piemēram, virknes, veselus skaitļus, skaitļus, komplektus un līdzīgus.
Sistēma. SysUtils vienība no Delphi XE3 īsteno ierakstu ar nosaukumu “TStringHelper”, kas faktiski ir virkņu ierakstu palīgs.
Izmantojot Delphi XE3, jūs varat sastādīt un izmantot nākamo kodu:
var
s: aukla; sākt
s: = 'Delphi XE3'; s. Aizstāt ('XE3', 'noteikumi', []). beigas;
Lai tas būtu iespējams, Delphi tika izveidots jauns konstrukts "[vienkāršā tipa] ierakstu palīgs". Virknēm tas ir "tips TStringHelper = virknes ierakstīšanas palīgs". Nosaukumā norādīts "ierakstu palīgs", bet tas nav par pagarināšanu ierakstus - drīzāk par tādu vienkāršo tipu kā virknes, veseli skaitļi un tamlīdzīgi paplašināšanu.
Sistēmā un sistēmā. SysUtils ir arī citi iepriekš definēti ierakstu palīgi vienkāršiem tipiem, tostarp: TSingleHelper, TDoubleHelper, TExtendedHelper, TGuidHelper (un daži citi). No nosaukuma var iegūt, kādu vienkāršo veidu palīgs pagarina.
Ir arī daži parocīgi atvērtā koda palīgi, piemēram TDateTimeHelper.
Uzskaitījumi? Palīgs uzskaitījumiem?
Uzskaites un kopas, kas tiek uzskatītas par vienkāršiem tipiem, tagad (XE3 un jaunākās versijās) arī var paplašināt ar funkcijām, kas ieraksta tipam var būt: funkcijas, procedūras un tamlīdzīgi.
Šeit ir vienkāršs uzskaitījums ("TDay") un ieraksts palīgā:
tips
TDay = (pirmdiena = 0, otrdiena, trešdiena, ceturtdiena, piektdiena, sestdiena, svētdiena); TDayHelper = ierakstu palīgs for TDay. funkcija AsByte: baits; funkcija Virziens: virkne; beigas;
funkcija TDayHelper. AsByte: baits; sākt
rezultāts: = baits (pats); beigas; funkcija TDayHelper. Virziens: virkne; sāktlietu sevi no
Pirmdiena: rezultāts: = “Pirmdiena”; Otrdiena: rezultāts: = “otrdiena”; Trešdiena: rezultāts: = “trešdiena”; Ceturtdiena: rezultāts: = 'ceturtdiena'; Piektdiena: rezultāts: = 'piektdiena'; Sestdiena: rezultāts: = 'Sestdiena'; Svētdiena: rezultāts: = 'svētdiena'; beigas; beigas;
var
aDay: TDay; s: aukla; sākt
aDay: = TDay. Pirmdiena; s: = diena. ToString. Pazemināt; beigas;
Komplekti? Palīgs komplektiem?
TDays = komplekts TDay;
var
dienas: TDays; s: aukla; sākt
dienas: = [pirmdiena.. Trešdiena]; dienas: = dienas + [svētdiena]; beigas;
BET, cik LIELS tas būtu, ja spētu:
var
dienas: TDays; b: Būla; sāktdienas: = [pirmdiena, otrdiena] b: = dienas. Krustojums ([pirmdiena, ceturtdiena]).
tips
TDaysHelper = ierakstu palīgs for TDays. funkcija Krustojums (const dienas: TDays): TDays; funkcija IsEmpty: Būla; beigas;... funkcija TDaysHelper. Krustojums (const dienas: TDays): TDays; sākt
rezultāts: = sevis * dienas; beigas; funkcija TDaysHelper. IsEmpty: Būla; sākt
rezultāts: = pats = []; beigas;
Katram komplekta tipam, kas izveidots ap uzskaiti, jums būs nepieciešams atsevišķs palīgs, jo diemžēl uzskaitījumi un komplekti neiet kopā sugas un sugas veidi.
Tas nozīmē, ka nevar apkopot:
// NEVAJADZĒTU PATĪK!
TGenericSet = kopums ;
Ierakstu palīgs baitu komplektā!
tips
TByteSet = komplekts Baits; TByteSetHelper = ierakstu palīgs for TByteSet.
TByteSetHelper definīcijā var būt šādi:
publiskiprocedūra Skaidrs; procedūra Iekļaut (const vērtība: baits); pārslodze; rindā; procedūra Iekļaut (const vērtības: TByteSet); pārslodze; rindā; procedūra Izslēgt (const vērtība: baits); pārslodze; rindā; procedūra Izslēgt (const vērtības: TByteSet); pārslodze; rindā; funkcija Krustojums (const vērtības: TByteSet): TByteSet; rindā; funkcija IsEmpty: Būla; rindā; funkcija Ietilpst(const vērtība: baits): Būla; pārslodze; rindā;funkcija Ietilpst(const vērtības: TByteSet): Būla; pārslodze; rindā;funkcija IsSuperSet (const vērtības: TByteSet): Būla; rindā; funkcija IsSubSet (const vērtības: TByteSet): Būla; rindā; funkcija Vienāds (const vērtības: TByteSet): Būla; rindā; funkcija Virziens: virkne; rindā; beigas;
{TByteSetHelper}procedūra TByteSetHelper. Iekļaut (const vērtība: baits); sākt
Sistēma. Iekļaut (sevi, vērtību); beigas; procedūra TByteSetHelper. Izslēgt (const vērtība: baits); sākt
Sistēma. Izslēgt (sevi, vērtību); beigas; procedūra TByteSetHelper. Skaidrs; sākt
sevi: = []; beigas; funkcija TByteSetHelper. Vienāds (const vērtības: TByteSet): Būla; sākt
rezultāts: = sevis = vērtības; beigas; procedūra TByteSetHelper. Izslēgt (const vērtības: TByteSet); sākt
sevis: = sevis vērtības; beigas; procedūra TByteSetHelper. Iekļaut (const vērtības: TByteSet); sākt
sevis: = sevis + vērtības; beigas; funkcija TByteSetHelper. Ietver (const vērtības: TByteSet): Būla; sākt
rezultāts: = IsSuperSet (vērtības); beigas; funkcija TByteSetHelper. Krustojums (const vērtības: TByteSet): TByteSet; sākt
rezultāts: = sevis * vērtības; beigas; funkcija TByteSetHelper. Ietver (const vērtība: Baits): Būla; sākt
rezultāts: = vērtība sevī; beigas; funkcija TByteSetHelper. IsEmpty: Būla; sākt
rezultāts: = pats = []; beigas; funkcija TByteSetHelper. IsSubSet (const vērtības: TByteSet): Būla; sākt
rezultāts: = pats <= vērtības; beigas; funkcija TByteSetHelper. IsSuperSet (const vērtības: TByteSet): Būla; sākt
rezultāts: = self> = vērtības; beigas; funkcija TByteSetHelper. ToString: virkne; var
b: baits; sāktpriekš b iekšā sevi darīt
rezultāts: = rezultāts + IntToStr (b) + ','; rezultāts: = Kopēt (rezultāts, 1, -2 + garums (rezultāts)); beigas;
var
dienasAsByteSet: TByteSet; sākt
dienasAsByteSet. Skaidrs; dienasAsByteSet. Iekļaut (pirmdien. AsByte); dienasAsByteSet. Iekļaut (vesels skaitlis (sestdiena); dienasAsByteSet. Iekļaut (baits (TDay. Otrdiena)); dienasAsByteSet. Iekļaut (vesels skaitlis (TDay. Trešdiena)); dienasAsByteSet. Iekļaut (vesels skaitlis (TDay. Trešdiena)); // 2. reizi - nav jēgas. dienasAsByteSet. Izslēgt (TDay. Otrdiena. AsByte); ShowMessage (dienasAsByteSet. ToString); ShowMessage (BoolToStr (dienasAsByteSet. IsSuperSet ([pirmdiena. AsByte, sestdiena. AsByte]), taisnība)); beigas;
Ir taču :(
Ņemiet vērā, ka TByteSet pieņem baitu vērtības - un šeit tiks pieņemta jebkura šāda vērtība. Iepriekš ieviestais TByteSetHelper nav uzskaites tips stingri (t.i., varat to barot ar vērtību, kas nav TDay vērtība)... bet kamēr es apzinos.. tas man der.