Funkcia jazyka Delphi pridaná pred niekoľkými rokmi (cesta späť do v Delphi 2005) s názvom „Pomocníci triedy“ sú navrhnutí tak, aby vám umožnili pridať nové funkcie do existujúcej triedy (alebo záznamu) zavedením nových metód do triedy (záznamu).
Nižšie nájdete niekoľko ďalších nápadov pre triednych pomocníkov + dozvedieť sa, kedy a kedy nepoužiť pomocníkov triedy.
Pomocník triedy pre...
Jednoducho povedané, pomocník triedy je konštrukt, ktorý rozširuje triedu zavedením nových metód do triedy pomocníka. Pomocník triedy vám umožňuje rozšíriť existujúcu triedu bez toho, aby ste ju skutočne modifikovali alebo zdedili.
Ak chcete rozšíriť triedu TStrings VCL, vyhlasujte a implementujte pomocníka triedy, napríklad:
typ
TStringsHelper = triedny pomocník pre TStrings. verejnosťfunkcie obsahuje (const aString: string): boolean; koniec;
Vyššie uvedená trieda s názvom "TStringsHelper" je pomocníkom triedy pre typ TStrings. Všimnite si, že TStrings je definovaný v Classes.pas, jednotke, ktorá je štandardne dostupná v klauzule použitie pre všetky Delphi napríklad jednotka formulára.
Funkcia, ktorú pridávame do typu TStrings pomocou nášho pomocníka triedy, je „Obsahuje“. Implementácia by mohla vyzerať takto:
funkcie TStringsHelper. obsahuje (const aString: string): boolean; začať
výsledok: = -1 <> IndexOf (aString); koniec;
Som si istý, že ste vo svojom kóde použili vyššie uvedené mnohokrát - aby ste skontrolovali, či niektorý potomok TStrings, napríklad TStringList, má vo svojej zbierke položiek nejakú hodnotu reťazca.
Všimnite si, že napríklad vlastnosť Položky a TComboBox alebo TListBox je typu TStrings.
Po implementácii TStringsHelper a zozname vo formulári (nazvanom „ListBox1“) môžete teraz skontrolovať, či je nejaký reťazec súčasťou vlastnosti List List (Zoznam položiek) pomocou:
ak ListBox1.Items. Obsahuje (nejaký reťazec) potom...
Pomocníci triedy Go a NoGo
Implementácia triednych pomocníkov má niektoré pozitívne a niektoré (možno si myslíte) negatívne dopady na vaše kódovanie.
Vo všeobecnosti by ste sa mali vyhnúť rozširovaniu svojich vlastných tried - ako by ste do nich mali pridať nejaké nové funkcie svoje vlastné triedy - pridajte nové veci priamo do implementácie triedy - nepoužívajte triedu pomocník.
Pomocníci triedy sú preto navrhnutí tak, aby rozširovali triedu, keď sa nemôžete (alebo nemusíte) spoliehať na normálne implementácie dedičstva triedy a implementáciu rozhraní.
Pomocník triedy nemôže deklarovať údaje inštancie, napríklad nové súkromné polia (alebo vlastnosti, ktoré by takéto polia čítali / zapisovali). Pridávanie nových polí triedy je povolené.
Pomocník triedy môže pridať nové metódy (funkcia, postup).
Pred Delphi XE3 ste mohli rozširovať iba triedy a záznamy - zložité typy. Od vydania Delphi XE 3 môžete tiež rozšíriť jednoduché typy, ako sú celé číslo alebo reťazec alebo TDateTime, a skonštruovať napríklad:
var
s: string; začať
s: = 'Pomocníci Delphi XE3'; s: = s. Veľké písmená. zvrátiť; koniec;
Píšem o jednoduchom pomocníkovi typu Delphi XE 3 v blízkej budúcnosti.
Kde je pomocník mojej triedy
Jedným obmedzením používania triednych pomocníkov, ktoré by vám mohli pomôcť „zastreliť sa do nohy“, je skutočnosť, že môžete definovať a priradiť viacerých pomocníkov k jednému typu. Na zdrojovom kóde sa však na akomkoľvek konkrétnom mieste uplatňuje iba nula alebo jeden pomocník. Použije sa pomocník definovaný v najbližšom rozsahu. Rozsah pomocníka triedy alebo záznamu je stanovený normálne Delphi móda (napríklad sprava doľava v časti o použití jednotky).
To znamená, že môžete definovať dvoch pomocníkov triedy TStringsHelper v dvoch rôznych jednotkách, ale iba jedna sa použije, keď sa skutočne používajú!
Ak pomocník triedy nie je definovaný v jednotke, kde používate jeho zavedené metódy - čo vo väčšine prípadov tak bude, neviete, akú implementáciu pomocníka triedy by ste skutočne použili. Dvaja triedni pomocníci pre TStrings, pomenované odlišne alebo s bydliskom v rôznych jednotkách, môžu mať inú implementáciu metódy „Obsahuje“ vo vyššie uvedenom príklade.
Použite alebo nie?
Áno, ale uvedomte si možné vedľajšie účinky.
Tu je ďalšie užitočné rozšírenie vyššie uvedeného pomocníka triedy TStringsHelper
TStringsHelper = triedny pomocník pre TStrings. súkromnéfunkcie GetTheObject (const aString: povrázok): TObject; procedúra SetTheObject (const aString: povrázok; const Hodnota: TObject); verejnosťnehnuteľnosť ObjectFor [const aString: povrázok]: TObject čítať GetTheObject write SetTheObject; koniec;... funkcie TStringsHelper. GetTheObject (const aString: povrázok): TObject; var
idx: celé číslo; začať
výsledok: = nula; idx: = IndexOf (aString); ak idx> -1 potom result: = Objects [idx]; koniec; procedúra TStringsHelper. SetTheObject (const aString: povrázok; const Hodnota: TObject); var
idx: celé číslo; začať
idx: = IndexOf (aString); ak idx> -1 potom Objekty [idx]: = hodnota; koniec;
Ak ste boli pridávanie objektov do zoznamu reťazcov, môžete uhádnuť, kedy použiť vyššie uvedený užitočný pomocník.