Freigeben über


Typdeklarationen

Q# unterstützt benutzerdefinierte struct Typen. Typen ähneln Datensatztypen in F#; sie sind unveränderlich, unterstützen aber ein Konstrukt Kopieren und Aktualisieren.

Strukturtypen

struct Typen können nur benannte Elemente enthalten und anonyme Elemente nicht unterstützen. Jede Kombination von benannten Elementen wird unterstützt, obwohl Elemente nicht geschachtelt werden können.

Die folgende Deklaration definiert z. B. eine Struktur Complex mit zwei benannten Elementen Real und Imaginary, die beide vom Typ Doublesind:

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

Sie können über ihren Namen oder über Destrukturierung auf die enthaltenen Elemente zugreifen (weitere Informationen finden Sie unter Elementzugriff). Sie können auch auf ein Tupel aller Elemente zugreifen, bei denen das Shape mit dem in der Deklaration definierten Element über den unwrap-Operatorübereinstimmt.

struct Typen sind aus zwei Gründen nützlich. Solange die Bibliotheken und Programme, die die definierten Typen verwenden, nicht über die Dekonstruktion, sondern über ihren Namen auf Elemente zugreifen, kann der Typ erweitert werden, um später zusätzliche Elemente zu enthalten, ohne Bibliothekscode zu unterbrechen. Aus diesem Grund wird der Zugriff auf Elemente über die Dekonstruktion im Allgemeinen abgeraten.

Zweitens können Sie Q# die Absicht und erwartungen für einen bestimmten Datentyp vermitteln, da keine automatische Konvertierung zwischen Werten von zwei struct Typen vorhanden ist, auch wenn ihre Elementtypen identisch sind.

Strukturkonstruktoren

Konstruktoren für neue struct Typen werden automatisch vom Compiler generiert, wenn eine struct Definition gelesen wird. Für die Complex-Anweisung im vorherigen Beispiel können Sie eine Instanz mit

let complexPair = Complex(1.4, 2.1);

Instanzen können auch vom Benutzer mit dem Schlüsselwort new definiert werden, z. B.

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

Sie können auch eine vorhandene Struktur mit der ... Syntax kopieren.

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

Beim Kopieren können Sie einzelne zu ändernde Felder angeben.

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