Разумевање помагача класе Делпхи (и записа)

Карактеристика језика Делпхи додата пре неколико година (уназад у Делфима 2005) названа "Помоћници класе" дизајнирана је да вам омогући да додате нову функционалност постојећој класи (или запису) увођењем нових метода у класу (запис).

У наставку ћете видети још неколико идеја за помоћнике у настави + научити када и када не користити помоћнике у класама.

Помоћник класе за...

Једноставним речима, помоћник у класи је конструкција која проширује класу увођењем нових метода у класу помагача. Помоћник класе омогућава вам да проширите постојећу класу без да је заправо модификујете или наслеђујете од ње.

Да бисте проширили ВЦЛ класу ТСтрингс, декларисали бисте и имплементирали помоћника класе као што је следеће:

тип
ТСтрингсХелпер = помоћник у класи за ТСтрингс. јавнифункција Садржи(цонст аСтринг: стринг): боолеан; крај; 

Горња класа, која се назива „ТСтрингсХелпер“ је помоћник класе за ТСтрингс тип. Имајте на уму да су ТСтрингс дефинирани у Цлассес.пас, јединици која је према заданим поставкама доступна у клаузули употребе за било коју Делпхи На пример, јединица јединице.

instagram viewer

Функција коју додајемо типу ТСтрингс помоћу помагача наше класе је „Садржи“. Имплементација би могла изгледати овако:

функција ТСтрингсХелпер. Садржи(цонст аСтринг: стринг): боолеан; започети
резултат: = -1 <> ИндекОф (аСтринг); крај; 

Сигурна сам да сте користили горе наведено више пута у вашем коду - да бисте проверили да ли неки ТСтрингс потомак, попут ТСтрингЛист-а, има неку вриједност стринга у својој колекцији Итемс.

Имајте на уму да, на пример, својство Итем а ТЦомбоБок или је ТЛистБок типа ТСтрингс.

Након примене ТСтрингсХелпер-а и оквира са листом на обрасцу (названом "ЛистБок1"), сада можете проверити да ли је неки низ део својства ставки у списку листе користећи:

ако ЛистБок1.Итемс. Садржи ('неки низ') онда... 

Класе Хелперс Го и НоГо

Примена помагача класе има неке позитивне, а неке (можда ћете помислити) негативне утицаје на ваше кодирање.

Уопште, требало би да избегавате ширење сопствених часова - као да морате додати неку нову функционалност сопствене прилагођене класе - додајте нове ствари у имплементацију класе директно - не користећи класу помагач.

Помоћници класе су стога дизајнирани да прошире класу кад се не можете (или не требате) ослањати на нормално наслеђивање класе и имплементације интерфејса.

Помоћник класе не може декларисати податке инстанци, попут нових приватних поља (или својстава која би читала / писала таква поља). Додавање нових поља класе је дозвољено.

Помагач класе може додати нове методе (функција, поступак).

Пре Делпхи КСЕ3 могли сте проширити само класе и записе - сложене типове. Из издања Делпхи КСЕ 3 такође можете проширити једноставне типове попут целог броја или низа или ТДатеТиме и имати конструкцију као:

вар
с: стринг; започети
с: = 'Делпхи КСЕ3 помагачи'; с: = с УпперЦасе. Реверсе; крај; 

О Делпхи КСЕ 3 помоћнику једноставног типа писат ћу у блиској будућности.

Где је помоћник моје класе

Једно ограничење употребе помагача из класе које би вам могло помоћи да „пуцате у стопало“ је чињеница да можете дефинисати и повезати више помагача са једном врстом. Међутим, само нула или један помагач се односе на било коју одређену локацију у изворном коду. Примјењује се помагач дефинисан у најближем обиму. Опсег помагача за класу или запис се одређује у нормалу Делпхи мода (на пример, десно лево у клаузули о употреби јединице).

То значи да можете дефинисати два помоћника класе ТСтрингсХелпер у две различите јединице, али само један ће се примењивати када се заиста користи!

Ако помоћник класе није дефинисан у јединици у којој користите уведене методе - што ће у већини случајева бити тако, не знате коју бисте имплементацију помагача класе заправо користили. Две помоћне групе за ТСтрингс, различито именоване или се налазе у различитим јединицама, могу имати различиту имплементацију за методу "Садржи" у горњем примеру.

Користите или не?

Да, али имајте на уму могуће нуспојаве.

Ево још једног корисног проширења горе поменутог помоћника ТСтрингсХелпер класе


ТСтрингсХелпер = помоћник у класи за ТСтрингс. приватнифункција ГетТхеОбјецт (цонст аСтринг: низ): ТОбјецт; процедура СетТхеОбјецт (цонст аСтринг: низ; цонст Вредност: ТОбјецт); јавнисвојство ОбјецтФор [цонст аСтринг: низ]: ТОбјецт читати ГетТхеОбјецт писати СетТхеОбјецт; крај;... функција ТСтрингсХелпер. ГетТхеОбјецт (цонст аСтринг: низ): ТОбјецт; вар
идк: интегер; започети
резултат: = нула; идк: = ИндекОф (аСтринг); ако идк> -1 онда резултат: = Објекти [идк]; крај; процедура ТСтрингсХелпер. СетТхеОбјецт (цонст аСтринг: низ; цонст Вредност: ТОбјецт); вар
идк: интегер; започети
идк: = ИндекОф (аСтринг); ако идк> -1 онда Објекти [идк]: = Вредност; крај; 

Ако си био додавање објеката на листу низа, можете да претпоставите када да користите горе наведено корисно својство помагача.