Share via


型別宣告

Q# 支援使用者定義型別。 使用者定義型別類似於 F# 中的記錄類型;其皆為不變的,但支援複製和更新的結構。

使用者定義型別

使用者定義型別可以同時包含命名和匿名項目。 例如,在命名空間中的下列宣告會定義類型 Complex,其具有兩個已命名項目 RealImaginary,兩個的類型都是 Double

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

支援任何已命名和未命名項目的組合,而且可能也會命名內部項目。 例如,Nested 類型,定義為

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

包含類型分別為 DoubleString 的兩個匿名項目,以及類型 Int 的命名項目 ItemName

您可以透過其名稱或透過解構 (如需詳細資訊,請參閱項目存取) 來存取包含的項目。 您也可以透過解除包裝運算子,存取圖形符合宣告中所定義所有項目的元組。

使用者定義型別很有用的原因有兩個。 首先,只要使用定義類型的程式庫和程式透過其名稱 (而不是解構) 存取項目,就可以將類型擴充為稍後包含其他項目,而不會中斷任何程式庫程式碼。 因此,通常不建議透過解構存取項目。

其次,Q# 可讓您針對特定資料類型傳達意圖和期望,因為兩個使用者定義型別的值之間沒有自動轉換,即使其項目類型相同也是一樣。

使用者定義的建構函式

編譯器會自動產生使用者定義型別的建構函式。 目前無法定義自訂的建構函式,但這可能是未來語言的新增功能。