Share via


Typdeklarationer

Q# stöder användardefinierade typer. Användardefinierade typer liknar posttyper i F#; de är oföränderliga men har stöd för en copy-and-update-konstruktion .

Användardefinierade typer

Användardefinierade typer kan innehålla både namngivna och anonyma objekt. Följande deklaration inom ett namnområde definierar till exempel en typ Complex som har två namngivna objekt Real och Imaginary, båda av typen Double:

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

Alla kombinationer av namngivna och namnlösa objekt stöds, och inre objekt kan också namnges. Till exempel typen Nested, definierad som

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

innehåller två anonyma objekt av typen Double respektive String ett namngivet objekt ItemName av typen Int.

Du kan komma åt de inneslutna objekten via deras namn eller genom dekonstruktion (mer information finns i objektåtkomst). Du kan också komma åt en tuppla av alla objekt där formen matchar den som definierats i deklarationen via unwrap-operatorn.

Användardefinierade typer är användbara av två skäl. För det första, så länge de bibliotek och program som använder de definierade typerna kommer åt objekt via deras namn i stället för genom dekonstruktion, kan typen utökas till att innehålla ytterligare objekt senare utan att någon bibliotekskod bryts. Därför rekommenderas det vanligtvis inte att komma åt objekt via dekonstruktion.

Q# För det andra kan du förmedla avsikten och förväntningarna för en viss datatyp eftersom det inte finns någon automatisk konvertering mellan värden för två användardefinierade typer, även om deras objekttyper är identiska.

Användardefinierade konstruktorer

Konstruktorer för användardefinierade typer genereras automatiskt av kompilatorn. För närvarande går det inte att definiera en anpassad konstruktor, även om detta kan vara ett tillägg till språket i framtiden.