Značajka jezika Delphi dodana je prije nekoliko godina (unazad u Delphiju 2005) nazvana "Pomoćnici klase" dizajnirana je tako da vam omogućuje dodavanje nove funkcionalnosti postojećoj klasi (ili zapisu) uvođenjem novih metoda u klasu (zapis).
U nastavku ćete vidjeti još nekoliko ideja za pomoćnike u nastavi + naučiti kada i kada ne koristiti pomagače klase.
Pomoćnik klase za...
Jednostavnim riječima, pomoćnik u klasi je konstrukcija koja proširuje klasu uvođenjem novih metoda u klasu pomagača. Pomoćnik klase omogućava vam da proširite postojeću klasu bez da je zapravo modificirate ili naslijedite od nje.
Za proširenje VCL-ove TStrings klase izjavit ćete i implementirati pomoćnika klase kao što je slijedeće:
tip
TStringsHelper = pomoćnik klase za TStrings. javnostfunkcija sadrži (const aString: string): boolean; kraj;
Gornja klasa, koja se naziva "TStringsHelper", je pomoćnik klase za TStrings tip. Imajte na umu da su TStrings definirani u Classes.pas, jedinici koja je prema zadanim postavkama dostupna u klauzuli upotrebe za bilo koju Delphi Na primjer, jedinica jedinice.
Funkcija koju dodajemo vrsti TStrings pomoću pomagača naše klase je "Sadrži". Provedba bi mogla izgledati kao:
funkcija TStringsHelper. sadrži (const aString: string): boolean; početi
rezultat: = -1 <> IndexOf (aString); kraj;
Sigurna sam da ste koristili gore navedeno više puta u vašem kodu - da biste provjerili ima li neki TStrings potomak, poput TStringList-a, neku vrijednost stringa u svojoj zbirci Items.
Imajte na umu da, na primjer, svojstvo Items za TComboBox ili je TListBox tipa TStrings.
Nakon što je TStringsHelper implementiran i okvir s popisom na obrascu (nazvanom "ListBox1"), sada možete provjeriti je li neki niz dio svojstva predmeta svojstva u popisu koristeći:
ako ListBox1.Items. Sadrži ('neki niz') zatim...
Pomoćnici klase Go i NoGo
Implementacija pomoćnika klase ima neke pozitivne, a neke (možda ćete pomisliti) negativne utjecaje na vaše kodiranje.
Općenito, trebali biste izbjegavati proširenje vlastitih predavanja - kao da biste trebali dodati neku novu funkcionalnost svoje prilagođene klase - dodajte nove stvari u implementaciju klase izravno - ne koristeći klasu pomagač.
Pomoćnici klase stoga su više dizajnirani za proširenje klase kada se ne možete (ili ne trebate) osloniti na normalno nasljeđivanje klase i implementacije sučelja.
Pomoćnik klase ne može deklarirati podatke instanci, poput novih privatnih polja (ili svojstava koja bi čitala / pisala takva polja). Dodavanje novih polja klase je dopušteno.
Pomagač klase može dodati nove metode (funkcija, postupak).
Prije Delphija XE3 mogli ste proširiti samo klase i zapise - složene vrste. Iz izdanja Delphi XE 3 možete proširiti i jednostavne tipove poput cjelobrojnih ili nizova ili TDateTime te imati sljedeće:
var
s: string; početi
s: = 'Delphi XE3 pomagači'; s: = s. Velika slova. obrnuti; kraj;
O Delphi XE 3 pomoćniku jednostavnog tipa pisat ću u bliskoj budućnosti.
Gdje je pomoćnik moje klase
Jedno ograničenje upotrebe pomagača iz klase koje bi vam moglo pomoći u "pucanju u nogu" je činjenica da možete definirati i povezati više pomagača s jednom vrstom. Međutim, na bilo kojem mjestu u izvornom kodu primjenjuje se samo nula ili jedan pomagač. Primijenit će se pomagač definiran u najbližem opsegu. Opseg pomagača za klasu ili evidenciju određuje se u normalu Delphi moda (na primjer, desno lijevo u klauzuli o upotrebi jedinice).
To znači da možete definirati dva pomoćnika klase TStringsHelper u dvije različite jedinice, ali samo će se jedan primijeniti kada se stvarno koristi!
Ako pomoćnik klase nije definiran u jedinici u kojoj koristite uvedene metode - što će u većini slučajeva biti tako, ne znate koju biste implementaciju pomagača klase zapravo koristili. Dvije pomoćne skupine za TStrings, različito imenovane ili se nalaze u različitim jedinicama, mogu imati različitu implementaciju za metodu "Sadrži" u gornjem primjeru.
Koristite ili ne?
Da, ali budite svjesni mogućih nuspojava.
Evo još jednog zgodnog proširenja gore spomenutog pomoćnika TStringsHelper klase
TStringsHelper = pomoćnik klase za TStrings. privatnafunkcija GetTheObject (const žica: niz): TObject; postupak SetTheObject (const žica: niz; const Vrijednost: TObject); javnostsvojstvo ObjectFor [const žica: niz]: TObject čitati GetTheObject pisati SetTheObject; kraj;... funkcija TStringsHelper. GetTheObject (const žica: niz): TObject; var
idx: cijeli broj; početi
rezultat: = nula; idx: = IndexOf (aString); ako idx> -1 zatim rezultat: = Objekti [idx]; kraj; postupak TStringsHelper. SetTheObject (const žica: niz; const Vrijednost: TObject); var
idx: cijeli broj; početi
idx: = IndexOf (aString); ako idx> -1 zatim Objekti [idx]: = Vrijednost; kraj;
Ako ste već bili dodavanje objekata na popis niza, možete pogoditi kada koristiti gornje korisno svojstvo pomagača.