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