99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

F#接口

2018-12-16 14:10 更新

接口提供了一種抽象的方式來(lái)描述類的實(shí)現(xiàn)細(xì)節(jié)。 它是一個(gè)模板,聲明類必須實(shí)現(xiàn)和公開公開的方法。

語(yǔ)法

接口指定其他類實(shí)現(xiàn)的相關(guān)成員集。 它有以下語(yǔ)法 

// Interface declaration:
[ attributes ]
type interface-name =
   [ interface ]
      [ inherit base-interface-name ...]
      abstract member1 : [ argument-types1 -> ] return-type1
      abstract member2 : [ argument-types2 -> ] return-type2
      ...
   [ end ]
	
// Implementing, inside a class type definition:
interface interface-name with
   member self-identifier.member1 argument-list = method-body1
   member self-identifier.member2 argument-list = method-body2
// Implementing, by using an object expression:
[ attributes ]
let class-name (argument-list) =
   { new interface-name with
      member self-identifier.member1 argument-list = method-body1
      member self-identifier.member2 argument-list = method-body2
      [ base-interface-definitions ]
   }
member-list

請(qǐng)注意

1、在接口聲明中,成員未實(shí)現(xiàn)。

2、成員是抽象的,由default關(guān)鍵字聲明。 但是,您可以使用default關(guān)鍵字提供默認(rèn)實(shí)現(xiàn)。
3、您可以通過(guò)使用對(duì)象表達(dá)式或使用類類型實(shí)現(xiàn)接口。
4、在類或?qū)ο髮?shí)現(xiàn)中,您需要為接口的抽象方法提供方法體。
5、關(guān)鍵字interfaceend(標(biāo)記定義的開始和結(jié)束)是可選的。
例如,

type IPerson =
   abstract Name : string
   abstract Enter : unit -> unit
   abstract Leave : unit -> unit

調(diào)用接口方法

接口方法通過(guò)接口調(diào)用,而不是通過(guò)實(shí)例的類或類型實(shí)現(xiàn)接口。 要調(diào)用接口方法,您可以使用:>運(yùn)算符(upcast運(yùn)算符)轉(zhuǎn)換為接口類型。
例如,

(s :> IPerson).Enter()
(s :> IPerson).Leave()

下面的例子說(shuō)明了這一概念 

type IPerson =
   abstract Name : string
   abstract Enter : unit -> unit
   abstract Leave : unit -> unit

type Student(name : string, id : int) =
   member this.ID = id
   interface IPerson with
      member this.Name = name
      member this.Enter() = printfn "Student entering premises!"
      member this.Leave() = printfn "Student leaving premises!"

type StuffMember(name : string, id : int, salary : float) =
   let mutable _salary = salary

   member this.Salary
      with get() = _salary
      and set(value) = _salary <- value

   interface IPerson with
      member this.Name = name
      member this.Enter() = printfn "Stuff member entering premises!"
      member this.Leave() = printfn "Stuff member leaving premises!"

let s = new Student("Zara", 1234)
let st = new StuffMember("Rohit", 34, 50000.0)

(s :> IPerson).Enter()
(s :> IPerson).Leave()
(st :> IPerson).Enter()
(st :> IPerson).Leave()

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

Student entering premises!
Student leaving premises!
Stuff member entering premises!
Stuff member leaving premises!

接口繼承

接口可以從一個(gè)或多個(gè)基本接口繼承。

下面的例子顯示的概念 

type Interface1 =
   abstract member doubleIt: int -> int

type Interface2 =
   abstract member tripleIt: int -> int

type Interface3 =
   inherit Interface1
   inherit Interface2
   abstract member printIt: int -> string

type multiplierClass() =
   interface Interface3 with
      member this.doubleIt(a) = 2 * a
      member this.tripleIt(a) = 3 * a
      member this.printIt(a) = a.ToString()

let ml = multiplierClass()
printfn "%d" ((ml:>Interface3).doubleIt(5))
printfn "%d" ((ml:>Interface3).tripleIt(5))
printfn "%s" ((ml:>Interface3).printIt(5))

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

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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)