Izpratne par Delphi klases (un ierakstu) palīgiem

Delfu valodas iezīme, kas pievienota pirms dažiem gadiem (atpakaļ Delphi 2005. gadā) ar nosaukumu “Klases palīgi” ir paredzēts, lai jūs varētu pievienot jaunu funkcionalitāti esošai klasei (vai ierakstam), ieviešot klasē (ierakstā) jaunas metodes.

Zemāk redzēsit vēl dažas idejas klases palīgiem + uzzināsit, kad un kad nelietot klases palīgus.

Klases palīgs...

Vienkārši sakot, klases palīgs ir konstrukcija, kas paplašina klasi, ieviešot jaunas metodes palīgu klasē. Klases palīgs ļauj paplašināt esošo klasi, to faktiski nemodificējot vai no tā negodot mantojumu.

Lai pagarinātu VCL TStrings klasi, jūs paziņojat un ieviesīsit klases palīgu šādi:

tips
TStringsHelper = klases palīgs TStrings. publiskifunkcija Satur (const aString: string): Būla; beigas; 

Iepriekš minētā klase, saukta par “TStringsHelper”, ir klases palīgs TStrings tipam. Ņemiet vērā, ka TStrings ir noteikts Classes.pas, vienībā, kas pēc noklusējuma ir pieejama lietojuma klauzulā jebkurai Delfi piemēram, formas vienība.

Funkcija, ko pievienojam TStrings tipam, izmantojot mūsu klases palīgu, ir “Satur”. Īstenošana varētu izskatīties šādi:

instagram viewer

funkcija TStringsHelper. Satur (const aString: string): Būla; sākt
rezultāts: = -1 <> IndexOf (aString); beigas; 

Esmu pārliecināts, ka jūs savā kodā esat izmantojis daudzas reizes - lai pārbaudītu, vai dažiem TStrings pēcnācējiem, piemēram, TStringList, vienumu kolekcijā ir kāda virknes vērtība.

Ņemiet vērā, ka, piemēram, a TComboBox vai TListBox ir TStrings tipa.

Pēc TStringsHelper ieviešanas un veidlapas saraksta lodziņa (ar nosaukumu “ListBox1”) tagad varat pārbaudīt, vai kāda virkne ir saraksta lodziņa Vienumu rekvizīta sastāvdaļa, izmantojot:

ja ListBox1.Items. Satur ('daži stīgu') tad... 

Klases palīgi Go un NoGo

Klases palīgu ieviešanai ir pozitīva un zināma (jūs varētu domāt) negatīva ietekme uz jūsu kodēšanu.

Parasti jums vajadzētu izvairīties no savu klašu pagarināšanas - it kā jums vajadzētu pievienot kādu jaunu funkcionalitāti savas pielāgotās klases - pievienojiet jauno saturu klases ieviešanā tieši - neizmantojot mācību stundu palīgs.

Tāpēc klases palīgi ir vairāk paredzēti klases paplašināšanai, kad jūs nevarat (vai nevajag) paļauties uz parasto klases mantojumu un interfeisa ieviešanu.

Klases palīgs nevar deklarēt gadījumu datus, piemēram, jaunus privātus laukus (vai rekvizītus, kas šādus laukus lasītu / rakstītu). Ir atļauts pievienot jaunus klases laukus.

Klases palīgs var pievienot jaunas metodes (funkcija, procedūra).

Pirms Delphi XE3 jūs varētu paplašināt tikai klases un ierakstus - sarežģītus tipus. No Delphi XE 3 izlaišanas jūs varat paplašināt arī vienkāršus tipus, piemēram, veselu skaitli vai virkni vai TDateTime, un izveidot šādus veidus:

var
s: aukla; sākt
s: = 'Delphi XE3 palīgi'; s: = s. Lielie burti. Reverss; beigas; 

Tuvākajā laikā rakstīšu par Delphi XE 3 vienkārša tipa palīgu.

Kur ir MANS klases palīgs

Klases palīgu izmantošanas ierobežojums, kas varētu jums palīdzēt "nošaut sevi kājā", ir tas, ka jūs varat definēt un saistīt vairākus palīgus ar vienu tipu. Tomēr uz jebkuru noteiktu avota koda vietu attiecas tikai nulle vai viens palīgs. Tiks piemērots palīgs, kas noteikts tuvākajā darbības jomā. Klases vai rekorda palīga darbības joma tiek noteikta normāli Delfi mode (piemēram, vienības lietošanas klauzulā no labās uz kreiso).

Tas nozīmē, ka jūs varētu definēt divus TStringsHelper klases palīgus divās dažādās vienībās, bet, kad tos faktiski izmantos, tiks piemērots tikai viens!

Ja klases palīgs nav definēts vienībā, kurā jūs izmantojat tās ieviestās metodes - kas lielākajā daļā gadījumu būs tādas, jūs nezināt, kādu klases palīga ieviešanu jūs faktiski izmantotu. Diviem klases palīgiem TStrings, kas nosaukti atšķirīgi vai kuri dzīvo dažādās vienībās, var būt atšķirīga iepriekšminētajā piemērā izmantotās metodes "Satur" ieviešana.

Lietot vai nelietot?

Jā, bet jāapzinās iespējamās blakusparādības.

Šeit ir vēl viens ērts iepriekšminētā TStringsHelper klases palīga paplašinājums


TStringsHelper = klases palīgs TStrings. Privātsfunkcija GetTheObject (const aString: virkne): TObject; procedūra SetTheObject (const aString: virkne; const Vērtība: TObject); publiskiīpašums ObjectFor [const aString: virkne]: Objekts lasīt GetTheObject rakstīt SetTheObject; beigas;... funkcija TStringsHelper. GetTheObject (const aString: virkne): TObject; var
idx: vesels skaitlis; sākt
rezultāts: = nulle; idx: = IndexOf (aString); ja idx> -1 tad rezultāts: = objekti [idx]; beigas; procedūra TStringsHelper. SetTheObject (const aString: virkne; const Vērtība: TObject); var
idx: vesels skaitlis; sākt
idx: = IndexOf (aString); ja idx> -1 tad Objekti [idx]: = vērtība; beigas; 

Ja esat bijis objektu pievienošana virkņu sarakstam, varat uzminēt, kad izmantot iepriekš norādīto parocīgo palīgu.

instagram story viewer