Share via


Typedeclaraties

Q# ondersteunt door de gebruiker gedefinieerde typen. Door de gebruiker gedefinieerde typen zijn vergelijkbaar met recordtypen in F#; ze zijn onveranderbaar, maar ondersteunen een copy-and-update-constructie .

Door de gebruiker gedefinieerde typen

Door de gebruiker gedefinieerde typen kunnen zowel benoemde als anonieme items bevatten. De volgende declaratie in een naamruimte definieert bijvoorbeeld een type Complex met twee benoemde items Real en Imaginary, beide van het type Double:

    newtype Complex = (Real: Double, Imaginary : Double);

Elke combinatie van benoemde en niet-benoemde items wordt ondersteund en binnenste items kunnen ook een naam hebben. Bijvoorbeeld het type Nested, gedefinieerd als

newtype Nested = (Double, (ItemName : Int, String)); 

bevat twee anonieme items van respectievelijk het type Double en een benoemd item ItemName van het type IntString .

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

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

Ten tweede kunt u de intentie en verwachtingen voor een specifiek gegevenstype overbrengen, Q# omdat er geen automatische conversie plaatsvindt tussen waarden van twee door de gebruiker gedefinieerde typen, zelfs niet als hun itemtypen identiek zijn.

Door de gebruiker gedefinieerde constructors

Constructors voor door de gebruiker gedefinieerde typen worden automatisch gegenereerd door de compiler. Momenteel is het niet mogelijk om een aangepaste constructor te definiƫren, hoewel dit in de toekomst mogelijk een aanvulling op de taal is.