- F# 基础教程
- F# - 主页
- F# - 概述
- F# - 环境设置
- F# - 程序结构
- F# - 基本语法
- F# - 数据类型
- F# - 变量
- F# - 运算符
- F# - 决策
- F# - 循环
- F# - 函数
- F# - 字符串
- F# - 选项
- F# - 元组
- F# - 记录
- F# - 列表
- F# - 序列
- F# - 集
- F# - 地图
- F# - 受歧视的工会
- F# - 可变数据
- F# - 数组
- F# - 可变列表
- F# - 可变字典
- F# - 基本 I/O
- 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。
type -params描述可选的泛型类型参数。
参数列表描述构造函数参数。主构造函数的默认访问修饰符是public。
与可选的as关键字一起使用的标识符为实例变量或自标识符提供名称,可以在类型定义中使用它来引用类型的实例。
继承关键字允许您指定类的基类。
let绑定允许您声明类的本地字段或函数值。
do -bindings部分包括在对象构造时执行的代码。
成员列表由附加构造函数、实例和静态方法声明、接口声明、抽象绑定以及属性和事件声明组成。
标记定义开始和结束的关键字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 绑定允许您为 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。