F#類

2018-12-16 13:49 更新

類是表示可以有屬性,方法和事件的對(duì)象類型。 “它們被用來在應(yīng)用到模型的動(dòng)作,過程,以及任何概念實(shí)體”。

句法

語(yǔ)法用于定義類類型如下 

// 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 ...
...

注意,

1、type-name是任何有效的標(biāo)識(shí)符。此公共的默認(rèn)訪問修飾符。
2、type-params描述了可選的通用類型參數(shù)。
3、parameter-list描述構(gòu)造函數(shù)參數(shù)。主構(gòu)造函數(shù)的默認(rèn)訪問修飾符是public。
4、identifier用于給可選的as關(guān)鍵詞指定名稱或自我標(biāo)識(shí)符,可以在類型定義中使用該名稱來引用類型的實(shí)例。
5、inherit關(guān)鍵字允許您為類指定基類。
6、let綁定允許您聲明該類的本地字段或函數(shù)值。
7、do-bindings部分包括在對(duì)象構(gòu)造時(shí)執(zhí)行的代碼。
8、member-list表由其他構(gòu)造函數(shù),實(shí)例和靜態(tài)方法聲明,接口聲明,抽象綁定以及屬性和事件聲明組成。
9、標(biāo)記定義的開始和結(jié)束的關(guān)鍵字class和end是可選的。

類的構(gòu)造函數(shù)

構(gòu)造函數(shù)是創(chuàng)建類類型實(shí)例的代碼。
在F#中,構(gòu)造函數(shù)的工作方式與其他.Net語(yǔ)言稍有不同。在類定義中,主構(gòu)造函數(shù)的參數(shù)被描述為參數(shù)列表。
構(gòu)造函數(shù)的主體由let和do綁定組成。
您可以通過使用new關(guān)鍵字添加其他構(gòu)造函數(shù)來添加成員 

new (argument-list) = constructor-body

下面的例子說明了這一概念 

下面的程序與計(jì)算線的長(zhǎng)度,而創(chuàng)建該類的對(duì)象的構(gòu)造沿創(chuàng)建一個(gè)類線 

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)}
Length: %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)

當(dāng)你編譯和執(zhí)行程序,它產(chǎn)生以下輸出 

Creating Line: {(1, 1), (4, 5)}
Length: 5

讓綁定

在類定義中的let綁定允許您定義F#類的私有字段和私有函數(shù)。

type Greetings(name) as gr =
   let data = name
   do
      gr.PrintMessage()
   member this.PrintMessage() =
      printf "Hello %s
" data
let gtr = new Greetings("Zara")

當(dāng)你編譯和執(zhí)行程序,它產(chǎn)生以下輸出 

Hello Zara

請(qǐng)注意使用自簽名類的Grails類。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)