Delphi plaadikomplektid komplektide ja muude lihtsate tüüpide jaoks

click fraud protection

Delphi klassi (ja plaadistamise) abiliste mõistmine tutvustab Delphi keele funktsiooni, mis võimaldab teil laiendada klassi või kirjetüübi määratlust, lisades olemasolevatele klassidele ja kirjetele funktsioone ja protseduure (meetodeid) ilma pärimine.

XE3 Delphi versioonis muutusid rekordilised abistajad võimsamaks, võimaldades laiendada lihtsaid Delphi tüüpe, näiteks stringe, täisarvu, enumust, komplekti jms.

Süsteem. Delphi XE3 üksus SysUtils juurutab kirjet nimega "TStringHelper", mis on tegelikult keelpillide rekordiline abimees.

Delphi XE3 abil saate kompileerida ja kasutada järgmist koodi:

var
s: nöör; alustada
s: = 'Delphi XE3'; s. Asenda ('XE3', 'reeglid', []). ToUpper; lõpp; 

Selleks oli Delphis tehtud uus konstruktsioon "lihtsa tüübi jaoks". Stringide jaoks on see "tüüp TStringHelper = stringi salvestamise abimees". Nimes öeldakse "rekordiline abimees", kuid see ei tähenda laiendamist arvestust - pigem lihtsate tüüpide, nagu stringid, täisarvud ja sarnased, laiendamise kohta.

Süsteemis ja süsteemis. SysUtils'is on ka teisi lihtsate tüüpide jaoks etteantud rekordiabilisi, sealhulgas: TSingleHelper, TDoubleHelper, TExtendedHelper, TGuidHelper (ja mõned teised). Nimest saate teada, millist lihtsat tüüpi abistaja laiendab.

instagram viewer

Leidub ka käepäraseid avatud lähtekoodiga abilisi, nt TDateTimeHelper.

Loetlused? Abistaja loendites?

loendeid
komplekti

Lihttüüpidena käsitatavaid loendeid ja komplekte saab nüüd (XE3-s ja muudes versioonides) laiendada ka funktsioonidega, mis rekordtüübil võivad olla: funktsioonid, protseduurid ja sarnased.

Siin on lihtne loend (TDay) ja rekordiline abistaja:

tüüp
TDay = (esmaspäev = 0, teisipäev, kolmapäev, neljapäev, reede, laupäev, pühapäev); TDayHelper = rekordiline abiline TDay. funktsiooni AsByte: bait; funktsiooni Üles: nöör; lõpp; 
funktsiooni TDayHelper. AsByte: bait; alustada
tulemus: = bait (ise); lõpp; funktsiooni TDayHelper. Üles: nöör; alustadajuhtum ise kohta
Esmaspäev: tulemus: = 'esmaspäev'; Teisipäev: tulemus: = 'teisipäev'; Kolmapäev: tulemus: = 'kolmapäev'; Neljapäev: tulemus: = 'neljapäev'; Reede: tulemus: = 'reede'; Laupäev: tulemus: = 'laupäev'; Pühapäev: tulemus: = 'pühapäev'; lõpp; lõpp; 
var
aDay: TDay; s: nöör; alustada
aDay: = TDay. Esmaspäev; s: = a päev. ToString. ToLower; lõpp; 
teisendage Delphi Enum stringi esinduseks

Komplektid? Komplektide abistaja?

TD-d = komplekt TDay; 
var
päevad: TDays; s: nöör; alustada
päevad: = [esmaspäev.. Kolmapäev]; päevad: = päevad + [pühapäev]; lõpp; 

KUIDAS, kui SUUR see oleks, kui saaksite seda teha:

var
päevad: TDays; b: loogiline; alustadapäevad: = [esmaspäev, teisipäev] b: = päevad. Ristmik ([esmaspäev, neljapäev]). IsEmpty;
tüüp
TDaysHelper = rekordiline abiline TD-d. funktsiooni Ristmik (const päeva: TDays): TDays; funktsiooni IsEmpty: loogiline; lõpp;... funktsiooni TDaysHelper. Ristmik (const päeva: TDays): TDays; alustada
tulemus: = ise * päevad; lõpp; funktsiooni TDaysHelper. IsEmpty: loogiline; alustada
tulemus: = ise = []; lõpp; 

Igal loenduse ümber konstrueeritud komplekti tüübil oleks teil vaja eraldi abistajat, kuna loendused ja komplektid ei lähe kahjuks geneerilised ja geneerilised tüübid.

See tähendab, et järgmist ei saa koostada:

// MITTE KOKKU KOKKUVÕTE!
TGenericSet = komplekt ; 
TEnum Lihtsate geneeriliste ravimite Enumi näide

Rekordiline abimees baidikomplekti jaoks!

tüüp
TByteSet = komplekt Bait; TByteSetHelper = rekordiline abiline TByteSet. 

TByteSetHelperi määratluses võib olla järgmine:

avalikprotseduur Selge; protseduur Kaasa (const väärtus: bait); ülekoormus; järjekorras; protseduur Kaasa (const väärtused: TByteSet); ülekoormus; järjekorras; protseduur Välista (const väärtus: bait); ülekoormus; järjekorras; protseduur Välista (const väärtused: TByteSet); ülekoormus; järjekorras; funktsiooni Ristmik (const väärtused: TByteSet): TByteSet; järjekorras; funktsiooni IsEmpty: loogiline; järjekorras; funktsiooni Sisaldab (const väärtus: bait): tõeväärtus; ülekoormus; järjekorras;funktsiooni Sisaldab (const väärtused: TByteSet): tõeväärtus; ülekoormus; järjekorras;funktsiooni IsSuperSet (const väärtused: TByteSet): tõeväärtus; järjekorras; funktsiooni IsSubSet (const väärtused: TByteSet): tõeväärtus; järjekorras; funktsiooni Võrdub (const väärtused: TByteSet): tõeväärtus; järjekorras; funktsiooni Üles: nöör; järjekorras; lõpp; 
{TByteSetHelper}protseduur TByteSetHelper. Kaasa (const väärtus: bait); alustada
Süsteem. Kaasa (ise, väärtus); lõpp; protseduur TByteSetHelper. Välista (const väärtus: bait); alustada
Süsteem. Välistada (ise, väärtus); lõpp; protseduur TByteSetHelper. Selge; alustada
ise: = []; lõpp; funktsiooni TByteSetHelper. Võrdub (const väärtused: TByteSet): loogiline; alustada
tulemus: = ise = väärtused; lõpp; protseduur TByteSetHelper. Välista (const väärtused: TByteSet); alustada
mina: = eneseväärtused; lõpp; protseduur TByteSetHelper. Kaasa (const väärtused: TByteSet); alustada
ise: = ise + väärtused; lõpp; funktsiooni TByteSetHelper. Sisaldab (const väärtused: TByteSet): loogiline; alustada
tulemus: = IsSuperSet (väärtused); lõpp; funktsiooni TByteSetHelper. Ristmik (const väärtused: TByteSet): TByteSet; alustada
tulemus: = enese * väärtused; lõpp; funktsiooni TByteSetHelper. Sisaldab (const väärtus: bait): tõeväärtus; alustada
tulemus: = väärtus iseendas; lõpp; funktsiooni TByteSetHelper. IsEmpty: loogiline; alustada
tulemus: = ise = []; lõpp; funktsiooni TByteSetHelper. IsSubSet (const väärtused: TByteSet): tõeväärtus; alustada
tulemus: = ise <= väärtused; lõpp; funktsiooni TByteSetHelper. IsSuperSet (const väärtused: TByteSet): tõeväärtus; alustada
tulemus: = ise> = väärtused; lõpp; funktsiooni TByteSetHelper. ToString: string; var
b: bait; alustadajaoks b sisse ise teha
tulemus: = tulemus + IntToStr (b) + ','; tulemus: = kopeerimine (tulemus, 1, -2 + pikkus (tulemus)); lõpp; 
var
päevaAsByteSet: TByteSet; alustada
päevaAsByteSet. Selge; päevaAsByteSet. Kaasa (esmaspäev. AsByte); päevaAsByteSet. Kaasa (täisarv (laupäev); päevaAsByteSet. Kaasa (bait (TDay. Teisipäev)); päevaAsByteSet. Kaasa (täisarv (TDay. Kolmapäev)); päevaAsByteSet. Kaasa (täisarv (TDay. Kolmapäev)); // 2. kord - pole mõtet. päevaAsByteSet. Välista (TDay. Teisipäev. AsByte); ShowMessage (päevaAsByteSet. ToString); ShowMessage (BoolToStr (päevaAsByteSet. IsSuperSet ([esmaspäev. AsByte, laupäev. AsByte]), tõsi)); lõpp; 

Seal on aga :(

Pange tähele, et TByteSet aktsepteerib baitväärtusi - ja kõik sellised väärtused oleksid siin aktsepteeritavad. Ülalpool rakendatud TByteSetHelper ei ole loenditüüp range (st saate seda sööta mitte-TDay väärtusega)... aga seni, kuni olen teadlik.. see töötab minu jaoks.

instagram story viewer