- F# 基礎教程
- F# - 首頁
- F# - 概述
- F# - 環境搭建
- F# - 程式結構
- F# - 基本語法
- F# - 資料型別
- F# - 變數
- F# - 運算子
- F# - 決策
- F# - 迴圈
- F# - 函式
- F# - 字串
- F# - 可選值
- F# - 元組
- F# - 記錄
- F# - 列表
- F# - 序列
- F# - 集合
- F# - 對映
- F# - discriminated union (區分聯合)
- F# - 可變資料
- F# - 陣列
- F# - 可變列表
- F# - 可變字典
- F# - 基本輸入/輸出
- F# - 泛型
- F# - 委託
- F# - 列舉
- F# - 模式匹配
- F# - 異常處理
- F# - 類
- F# - 結構體
- F# - 運算子過載
- F# - 繼承
- F# - 介面
- F# - 事件
- F# - 模組
- F# - 名稱空間
F# - 類
類是表示可以具有屬性、方法和事件的物件的型別。它們用於模擬應用程式中的操作、過程和任何概念實體。
語法
定義類型別的語法如下:
// Class definition:
type [access-modifier] type-name [type-params] [access-modifier] ( parameter-list ) [ as identifier ] =
[ class ]
[ inherit base-type-name(base-constructor-args) ]
[ let-bindings ]
[ do-bindings ]
member-list
...
[ end ]
// Mutually recursive class definitions:
type [access-modifier] type-name1 ...
and [access-modifier] type-name2 ...
...
其中:
型別名稱是任何有效的識別符號。預設訪問修飾符為public。
型別引數描述可選的泛型型別引數。
引數列表描述建構函式引數。主建構函式的預設訪問修飾符為public。
使用可選as關鍵字的識別符號為例項變數或自身識別符號命名,可在型別定義中使用它來引用型別的例項。
inherit關鍵字允許您指定類的基類。
let繫結允許您宣告對類區域性欄位或函式值。
do繫結部分包含在物件構造時執行的程式碼。
成員列表由附加的建構函式、例項和靜態方法宣告、介面宣告、抽象繫結以及屬性和事件宣告組成。
標記定義開始和結束的關鍵字class和end是可選的。
類的建構函式
建構函式是建立類型別例項的程式碼。
在 F# 中,建構函式的工作方式與其他 .Net 語言略有不同。在類定義中,主建構函式的引數被描述為引數列表。
建構函式的主體由let和do繫結組成。
您可以使用 new 關鍵字新增成員來新增其他建構函式:
new (argument-list) = constructor-body
以下示例說明了這個概念:
示例
以下程式建立一個線類以及一個建構函式,該建構函式在建立類的物件時計算線的長度:
type Line = class
val X1 : float
val Y1 : float
val X2 : float
val Y2 : float
new (x1, y1, x2, y2) as this =
{ X1 = x1; Y1 = y1; X2 = x2; Y2 = y2;}
then
printfn " Creating Line: {(%g, %g), (%g, %g)}\nLength: %g"
this.X1 this.Y1 this.X2 this.Y2 this.Length
member x.Length =
let sqr x = x * x
sqrt(sqr(x.X1 - x.X2) + sqr(x.Y1 - x.Y2) )
end
let aLine = new Line(1.0, 1.0, 4.0, 5.0)
編譯並執行程式後,將產生以下輸出:
Creating Line: {(1, 1), (4, 5)}
Length: 5
Let 繫結
類定義中的 let 繫結允許您為 F# 類定義私有欄位和私有函式。
type Greetings(name) as gr =
let data = name
do
gr.PrintMessage()
member this.PrintMessage() =
printf "Hello %s\n" data
let gtr = new Greetings("Zara")
編譯並執行程式後,將產生以下輸出:
Hello Zara
請注意對 Greetings 類的自身識別符號 *gr* 的使用。
廣告