Карактеристика језика Делпхи додата пре неколико година (уназад у Делфима 2005) названа "Помоћници класе" дизајнирана је да вам омогући да додате нову функционалност постојећој класи (или запису) увођењем нових метода у класу (запис).
У наставку ћете видети још неколико идеја за помоћнике у настави + научити када и када не користити помоћнике у класама.
Помоћник класе за...
Једноставним речима, помоћник у класи је конструкција која проширује класу увођењем нових метода у класу помагача. Помоћник класе омогућава вам да проширите постојећу класу без да је заправо модификујете или наслеђујете од ње.
Да бисте проширили ВЦЛ класу ТСтрингс, декларисали бисте и имплементирали помоћника класе као што је следеће:
тип
ТСтрингсХелпер = помоћник у класи за ТСтрингс. јавнифункција Садржи(цонст аСтринг: стринг): боолеан; крај;
Горња класа, која се назива „ТСтрингсХелпер“ је помоћник класе за ТСтрингс тип. Имајте на уму да су ТСтрингс дефинирани у Цлассес.пас, јединици која је према заданим поставкама доступна у клаузули употребе за било коју Делпхи На пример, јединица јединице.
Функција коју додајемо типу ТСтрингс помоћу помагача наше класе је „Садржи“. Имплементација би могла изгледати овако:
функција ТСтрингсХелпер. Садржи(цонст аСтринг: стринг): боолеан; започети
резултат: = -1 <> ИндекОф (аСтринг); крај;
Сигурна сам да сте користили горе наведено више пута у вашем коду - да бисте проверили да ли неки ТСтрингс потомак, попут ТСтрингЛист-а, има неку вриједност стринга у својој колекцији Итемс.
Имајте на уму да, на пример, својство Итем а ТЦомбоБок или је ТЛистБок типа ТСтрингс.
Након примене ТСтрингсХелпер-а и оквира са листом на обрасцу (названом "ЛистБок1"), сада можете проверити да ли је неки низ део својства ставки у списку листе користећи:
ако ЛистБок1.Итемс. Садржи ('неки низ') онда...
Класе Хелперс Го и НоГо
Примена помагача класе има неке позитивне, а неке (можда ћете помислити) негативне утицаје на ваше кодирање.
Уопште, требало би да избегавате ширење сопствених часова - као да морате додати неку нову функционалност сопствене прилагођене класе - додајте нове ствари у имплементацију класе директно - не користећи класу помагач.
Помоћници класе су стога дизајнирани да прошире класу кад се не можете (или не требате) ослањати на нормално наслеђивање класе и имплементације интерфејса.
Помоћник класе не може декларисати податке инстанци, попут нових приватних поља (или својстава која би читала / писала таква поља). Додавање нових поља класе је дозвољено.
Помагач класе може додати нове методе (функција, поступак).
Пре Делпхи КСЕ3 могли сте проширити само класе и записе - сложене типове. Из издања Делпхи КСЕ 3 такође можете проширити једноставне типове попут целог броја или низа или ТДатеТиме и имати конструкцију као:
вар
с: стринг; започети
с: = 'Делпхи КСЕ3 помагачи'; с: = с УпперЦасе. Реверсе; крај;
О Делпхи КСЕ 3 помоћнику једноставног типа писат ћу у блиској будућности.
Где је помоћник моје класе
Једно ограничење употребе помагача из класе које би вам могло помоћи да „пуцате у стопало“ је чињеница да можете дефинисати и повезати више помагача са једном врстом. Међутим, само нула или један помагач се односе на било коју одређену локацију у изворном коду. Примјењује се помагач дефинисан у најближем обиму. Опсег помагача за класу или запис се одређује у нормалу Делпхи мода (на пример, десно лево у клаузули о употреби јединице).
То значи да можете дефинисати два помоћника класе ТСтрингсХелпер у две различите јединице, али само један ће се примењивати када се заиста користи!
Ако помоћник класе није дефинисан у јединици у којој користите уведене методе - што ће у већини случајева бити тако, не знате коју бисте имплементацију помагача класе заправо користили. Две помоћне групе за ТСтрингс, различито именоване или се налазе у различитим јединицама, могу имати различиту имплементацију за методу "Садржи" у горњем примеру.
Користите или не?
Да, али имајте на уму могуће нуспојаве.
Ево још једног корисног проширења горе поменутог помоћника ТСтрингсХелпер класе
ТСтрингсХелпер = помоћник у класи за ТСтрингс. приватнифункција ГетТхеОбјецт (цонст аСтринг: низ): ТОбјецт; процедура СетТхеОбјецт (цонст аСтринг: низ; цонст Вредност: ТОбјецт); јавнисвојство ОбјецтФор [цонст аСтринг: низ]: ТОбјецт читати ГетТхеОбјецт писати СетТхеОбјецт; крај;... функција ТСтрингсХелпер. ГетТхеОбјецт (цонст аСтринг: низ): ТОбјецт; вар
идк: интегер; започети
резултат: = нула; идк: = ИндекОф (аСтринг); ако идк> -1 онда резултат: = Објекти [идк]; крај; процедура ТСтрингсХелпер. СетТхеОбјецт (цонст аСтринг: низ; цонст Вредност: ТОбјецт); вар
идк: интегер; започети
идк: = ИндекОф (аСтринг); ако идк> -1 онда Објекти [идк]: = Вредност; крај;
Ако си био додавање објеката на листу низа, можете да претпоставите када да користите горе наведено корисно својство помагача.