構文:
type インターフェース名=
abstract member 処理名:<引数の型> -> <戻り値の型>
...
実装:
interface インターフェース名 with
member 自己識別子.処理名(<引数>)=処理...
...
呼び出し:
①クラス内で実装&呼び出せるようにする(こっちがおすすめ)
member this.処理名=(this:>インターフェース名).処理名(<引数>)
②インスタンスにアップキャスト
(インスタンス:>インターフェース名).処理名(引数)
実装例
//①抽象クラス
type absclasses()= //抽象クラス「absclasses」
abstract member msglength:string->int
default _.msglength(txt)=String.length(txt) //文字列の長さを返す
type absimp()=
inherit absclasses()
override _.msglength(txt)=String.length(txt)*2 //文字列の長さ*2を返す
//呼び出し
absimp().msglength("あいうえお")
//出力:10
//②インターフェース
type Icall= //インターフェース「Icall」
abstract member Call:unit->unit //unitを受け取りunitを返す
//実装
type jissou2()=
member this.Call()=(this :> Icall).Call() //メンバーにアップキャスト
interface Icall with //インターフェースの利用を宣言
member _.Call()=printfn "interface used"
//呼び出し
jissou2().Call()
//出力:interface used