Megosztás a következőn keresztül:


Típusdeklarációk

Q# támogatja a felhasználó által definiált struct típusokat. struct típusok hasonlóak az F# rekordtípusaihoz; nem módosíthatók, de támogatják másolási és frissítési szerkezetet.

Szerkezettípusok

struct típusok csak névvel ellátott elemeket tartalmazhatnak, és nem támogatják a névtelen elemeket. Az elnevezett elemek bármilyen kombinációja támogatott, bár az elemek nem ágyazhatók be.

Az alábbi deklaráció például egy strukturált Complex határoz meg, amely két elnevezett elemet Real és Imaginarytartalmaz, mindkettő Double:

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

A tartalmazott elemeket a nevük vagy dekonstruálási keresztül érheti el (további információ: elemhozzáférési). Az összes olyan elem rekordját is elérheti, ahol az alakzat megegyezik a deklarációban definiáltval a .

struct típusok két okból hasznosak. Először is, ha a definiált típusokat használó kódtárak és programok a nevükön keresztül férnek hozzá az elemekhez a dekonstruálás helyett, a típus később további elemeket is tartalmazhat, anélkül, hogy bármilyen kódtárkódot feltörne. Emiatt az elemek dekonstruáláson keresztüli elérése nem ajánlott.

Másodszor, Q# lehetővé teszi egy adott adattípus szándékának és elvárásainak átadását, mivel nincs automatikus átalakítás két struct típusú érték között, még akkor sem, ha az elemtípusok azonosak.

Szerkezetkonstruktorok

A fordító automatikusan létrehoz konstruktorokat az új struct-típusokhoz, amikor beolvassa a struct definíciót. Az előző példában szereplő Complex utasításhoz létrehozhat egy példányt a következővel:

let complexPair = Complex(1.4, 2.1);

A példányokat a new kulcsszóval is definiálhatja, például

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

A meglévő szerkezeteket átmásolhatja a ... szintaxissal

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

Másoláskor megadhatja a módosítandó egyes mezőket

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