Típus deklarációk

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

Felhasználó által definiált típusok

A felhasználó által definiált típusok névvel ellátott és névtelen elemeket is tartalmazhatnak. Az alábbi deklaráció például egy névtérben olyan típust Complex határoz meg, amely két elnevezett elemet Real tartalmaz, és Imaginarymindkettő típust Double:

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

A névvel ellátott és a névtelen elemek bármilyen kombinációja támogatott, és a belső elemek is elnevezhetők. Például a típus Nested, amely a következőként van definiálva:

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

két névtelen típusú, DoubleString illetve egy nevű elemet ItemNameInttartalmaz.

A tartalmazott elemeket a nevük vagy a dekonstruálás útján érheti el (további információt az elemhozzáférés című témakörben talál). Az összes olyan elem rekordját is elérheti, ahol az alakzat megegyezik a deklarációban definiált értékekkel a kicsomagolási operátoron keresztül.

A felhasználó által definiált 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, és nem dekonstruálással, a típus később további elemeket is tartalmazhat anélkül, hogy bármilyen kódtárkód megtörne. Emiatt az elemek dekonstruálással való elérése általában nem ajánlott.

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

Felhasználó által definiált konstruktorok

A felhasználó által definiált típusok konstruktorát a fordító automatikusan létrehozza. Jelenleg nem lehet egyéni konstruktort definiálni, bár ez a jövőben a nyelv kiegészítése lehet.