Recorddatatypes begrijpen en gebruiken in Delphi

Sets zijn oke, arrays zijn goed.

Stel dat we drie eendimensionale arrays willen maken voor 50 leden in onze programmeergemeenschap. De eerste array is voor namen, de tweede voor e-mails en de derde voor het aantal uploads (componenten of applicaties) naar onze community.

Elke array (lijst) zou overeenkomende indexen en voldoende code hebben om alle drie de lijsten parallel te houden. Natuurlijk kunnen we het proberen met één driedimensionale array, maar hoe zit het met het type? We hebben een string nodig voor namen en e-mails, maar een geheel getal voor het aantal uploads.

De manier om met een dergelijke gegevensstructuur te werken, is door Delphi's te gebruiken recordstructuur.

TMember = Record...

De volgende verklaring maakt bijvoorbeeld een recordtype met de naam TMember, degene die we in ons geval kunnen gebruiken.

In wezen een record datastructuur kan elk van de ingebouwde types van Delphi combineren inclusief alle typen die u hebt gemaakt. Recordtypen definiëren vaste verzamelingen van items van verschillende types. Elk item, of

instagram viewer
veld-, is als een variabele, bestaande uit een naam en een type.

TMember-type bevat drie velden: een tekenreekswaarde met de naam Naam (om de naam van een lid te bevatten), een waarde van een tekenreekstype genaamd e-mail (voor één e-mail) en een geheel getal (kardinaal) genaamd Berichten (om het aantal inzendingen voor onze gemeenschap).

Nadat we het recordtype hebben ingesteld, kunnen we een variabele declareren van het type TMember. TMember is nu net zo goed variabel type voor variabelen als elk van de Delphi's ingebouwde types zoals String of Integer. Opmerking: de TMember-type-aangifte kent geen geheugen toe voor de velden Naam, E-mail en Berichten;

Om daadwerkelijk een instantie van TMember-record te maken, moeten we een variabele van het TMember-type declareren, zoals in de volgende code:

Als we nu een record hebben, gebruiken we een punt om de velden van DelphiGuide te isoleren.

Opmerking: het bovenstaande stukje code kan worden herschreven met het gebruik van mettrefwoord.

We kunnen nu de waarden van de velden van DelphiGuide naar AMember kopiëren.

Recordbereik en zichtbaarheid

Recordtype gedeclareerd in de aangifte van een formulier (implementatiesectie), functie of procedure heeft een bereik dat beperkt is tot het blok waarin het wordt gedeclareerd. Als het record wordt gedeclareerd in het interface-gedeelte van een eenheid, heeft het een bereik dat andere eenheden of programma's omvat die de eenheid gebruiken waar de aangifte plaatsvindt.

An Array of Records

Omdat TMember werkt als elk ander type Object Pascal, kunnen we een reeks recordvariabelen declareren:

Opmerking: hier is hoe declareer en initialiseer een constante reeks records in Delphi.

Records als recordvelden

Aangezien een recordtype legitiem is als elk ander Delphi-type, kunnen we een veld van een record zelf een record laten zijn. We kunnen bijvoorbeeld ExpandedMember maken om bij te houden wat het lid indient samen met de lidinformatie.

Het is nu op de een of andere manier moeilijker om alle informatie in te vullen die nodig is voor één record. Er zijn meer punten (stippen) vereist om toegang te krijgen tot de velden van TExpandedMember.

Neem op met "Onbekende" velden

Een recordtype kan een variantdeel hebben (niet te verwarren met Variant type variabele). Variantrecords worden bijvoorbeeld gebruikt wanneer we een recordtype met velden willen maken verschillende soorten gegevens, maar we weten dat we nooit alle velden in één record hoeven te gebruiken voorbeeld. Bekijk de Help-bestanden van Delphi voor meer informatie over Variant-onderdelen in Records. Het gebruik van een variabel recordtype is niet typeveilig en is geen aanbevolen programmeerpraktijk, vooral voor beginners.

Variantrecords kunnen echter behoorlijk nuttig zijn, als u ooit in een situatie terechtkomt om ze te gebruiken.

instagram story viewer