F# - 接口

F# - 接口 首页 / F#入门教程 / F# - 接口

接口是一个模板,用于声明该类必须实现并公开的方法。

接口指定其他类实现的相关成员集,它具有以下语法-

无涯教程网

//接口声明:
[ attributes ]
type interface-name =
   [ interface ]
      [ inherit base-interface-name ...]
      abstract member1 : [ argument-types1 -> ] return-type1
      abstract member2 : [ argument-types2 -> ] return-type2
      ...
   [ end ]
	
//在类类型定义中实现:
interface interface-name with
   member self-identifier.member1 argument-list=method-body1
   member self-identifier.member2 argument-list=method-body2
//通过使用对象表达式实现:
[ 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

如,

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

调用接口方法

接口方法是通过接口而不是通过类或类型实现接口的实例调用的,要调用接口方法,请使用:>运算符将其强制转换为接口类型。

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

以下示例说明了概念-

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()

编译并执行程序时,将产生以下输出-

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

接口继承

以下示例显示了概念-

链接:https://www.learnfk.comhttps://www.learnfk.com/fsharp/fsharp-interfaces.html

来源:LearnFk无涯教程网

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))

编译并执行程序时,将产生以下输出-

10
15
5

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

TypeScript开发实战 -〔梁宵〕

编译原理之美 -〔宫文学〕

移动端自动化测试实战 -〔思寒〕

接口测试入门课 -〔陈磊〕

软件设计之美 -〔郑晔〕

分布式数据库30讲 -〔王磊〕

爆款文案修炼手册 -〔乐剑峰〕

深入C语言和程序运行原理 -〔于航〕

自动化测试高手课 -〔柳胜〕

好记忆不如烂笔头。留下您的足迹吧 :)