Delen via


Typedeclaraties

Q# ondersteunt door de gebruiker gedefinieerde typen struct. struct typen zijn vergelijkbaar met recordtypen in F#; ze zijn onveranderbaar, maar ondersteunen een -constructie voor kopiƫren en bijwerken.

Struct-typen

struct typen mogen alleen benoemde items bevatten en bieden geen ondersteuning voor anonieme items. Elke combinatie van benoemde items wordt ondersteund, hoewel items niet kunnen worden genest.

De volgende declaratie definieert bijvoorbeeld een struct-Complex met twee benoemde items Real en Imaginary, beide van het type Double:

struct Complex {
    Real : Double,
    Imaginary : Double,
}

U kunt de ingesloten items openen via hun naam of door deconstructie (zie itemtoegangvoor meer informatie). U kunt ook toegang krijgen tot een tuple van alle items waarbij de shape overeenkomt met de shape die in de declaratie is gedefinieerd via de operator uitpakken.

struct typen zijn om twee redenen nuttig. Ten eerste, zolang de bibliotheken en programma's die gebruikmaken van de gedefinieerde typen toegang krijgen tot items via hun naam in plaats van door deconstructie, kan het type worden uitgebreid om later extra items te bevatten zonder dat er bibliotheekcode wordt onderbroken. Daarom wordt het openen van items via deconstructie over het algemeen afgeraden.

Ten tweede kunt u met Q# de intentie en verwachtingen voor een specifiek gegevenstype overbrengen, omdat er geen automatische conversie is tussen waarden van twee struct typen, zelfs als de itemtypen identiek zijn.

Struct-constructors

Constructors voor nieuwe struct typen worden automatisch gegenereerd door de compiler wanneer er een struct definitie wordt gelezen. Voor de Complex struct in het vorige voorbeeld kunt u een exemplaar maken met

let complexPair = Complex(1.4, 2.1);

Exemplaren kunnen ook worden gedefinieerd door de gebruiker met het trefwoord new, bijvoorbeeld

let complexPair = new Complex { Real = 1.4, Imaginary = 2.1 };

U kunt ook een bestaande struct kopiƫren met de syntaxis van de ...

let copyPair = new Complex { ...complexPair };

Wanneer u kopieert, kunt u afzonderlijke velden opgeven die u wilt wijzigen

let updatedPair = new Complex { ...complexPair, Real = 3.5 };