F#入门-第四章 面向对象-第二节 类与构造器
2010-09-20 13:37
141 查看
■ 最小的类
类是数据与函数的集合,是面向对象编程的一种基本的数据结构。
类的定义如下例所示。
类的定义 type 类名 [ 模式 ] [ as 识别符 ] =
class
继承声明
let式
[元素类型定义]*
end
class?end中的内容稍后再介绍,首先让我们来看最小的类。
最小的类
这里是没有字段,没有成员函数,什么都没有的最小类的定义。但这样的类是什么用处也没有的,所以接下来让我们追加字段,介绍两种类的构造器的定义方法。
■ 显式的构造器
构造器是将类实例化,创建对象时为了进行初始化而调用的函数。在F#中,有两种构造器的书写方法,首先让我们举个例子。
使用显式构造器的类声明
使用显式构造器的类声明在声明字段时使用val。另外,从new开始的这一行称为构造器。简略的书写方法如下例所示。
简略的构造器定义 new 模式 [as 识别符] = {[识别符=表达式 ;]*} [then 表达式]
上例中在模式中把data作为临时参数,在构造器中把data的值传给a。具体来说,通过new Explicit(10)来调用构造器并把10赋值给data,同时,通过这种方法把10赋值给a。另外,可以通过在对象名后加点,点后加字段名的方式访问用val声明的变量。
在构造器中更加稍微复杂一点的处理如下例所示。这段程序中,没有在创建对象后进行处理,而是在创建对象的同时进行了处理,得到的结果与上例相同。
在构造器中的处理
初始化结束后在then语句中继续执行在构造器内执行的初始化之外的处理。同时,如果想要引用构造器内自身的字段值,需要使用as关键字,后面跟类的别名,该别名代表类本身,访问类本身时使用该别名。在这个例子中用this来指定引用类本身,用this.a来访问类本身的字段a。
■ 隐式的构造器
针对利用类来说,还有一种使用隐式构造器的方法。这是显式构造器之后在F#中追加的功能。
使用隐式构造器时,在类名后接着指定模式。同时,用let来声明类内部使用的变量。
使用隐式构造器的类声明
像这样用let定义的值,在类的外部是不能引用的。通过这种方式来使用类时,为了要引用到内部的值需要使用成员函数。或许,想要使用显式的字段声明时,需要使用类似DefaultValue的属性,同时还必须加上mutable。
显式的字段的利用
这样声明字段相当于把字段用0或""进行初始化。这样,x的值就可以在类的外部被访问了。
最后,总结归纳成员的定义。
成员的定义 元素类型定义 :=
| 字段定义
| 成员定义
| 接口定义
字段定义 :=
| [static] [mutable] 识别符 : 类型名
成员定义 :=
| [ static ] member 成员绑定
| (override|default) 成员绑定
| 构造器定义
| abstract 签名定义
| val [mutable] 值、签名成员
构造器定义 :=
| new 模式 [as 识别符] = 构造器表达式
构造器表达式 :=
| ';'文字 构造器表达式
| 构造器表达式 then 表达式
| if 表达式 then 构造器表达式 else 构造器表达式
| let 变量声明 in 构造器表达式
| 对象的初始化表达式
对象的初始化表达式 :=
| '{' [ inherit 表达式; ] 字段绑定 '}'
| new 类型 表达式
类是数据与函数的集合,是面向对象编程的一种基本的数据结构。
类的定义如下例所示。
类的定义 type 类名 [ 模式 ] [ as 识别符 ] =
class
继承声明
let式
[元素类型定义]*
end
class?end中的内容稍后再介绍,首先让我们来看最小的类。
最小的类
type Minimum = class end;; |
■ 显式的构造器
构造器是将类实例化,创建对象时为了进行初始化而调用的函数。在F#中,有两种构造器的书写方法,首先让我们举个例子。
使用显式构造器的类声明
type Explicit = class val a : int new (data) = {a = data;} end;; let ex = new Explicit(10);; System.Console.Write(ex.a);; |
简略的构造器定义 new 模式 [as 识别符] = {[识别符=表达式 ;]*} [then 表达式]
上例中在模式中把data作为临时参数,在构造器中把data的值传给a。具体来说,通过new Explicit(10)来调用构造器并把10赋值给data,同时,通过这种方法把10赋值给a。另外,可以通过在对象名后加点,点后加字段名的方式访问用val声明的变量。
在构造器中更加稍微复杂一点的处理如下例所示。这段程序中,没有在创建对象后进行处理,而是在创建对象的同时进行了处理,得到的结果与上例相同。
在构造器中的处理
type Explicit = class val a : int new (data) as this = {a = data;} then System.Console.Write(this.a) end;; let ex = new Explicit(10);; |
■ 隐式的构造器
针对利用类来说,还有一种使用隐式构造器的方法。这是显式构造器之后在F#中追加的功能。
使用隐式构造器时,在类名后接着指定模式。同时,用let来声明类内部使用的变量。
使用隐式构造器的类声明
type Implicit(x:int) = class let a = x; end;; let im = new Implicit(10);; //System.Console.Write(im.a);; //错误 |
显式的字段的利用
type Implicit(x:int) = class let a = x; [<DefaultValue>] val mutable x : int end;; let im = new Implicit(10);; System.Console.Write(im.x);; |
最后,总结归纳成员的定义。
成员的定义 元素类型定义 :=
| 字段定义
| 成员定义
| 接口定义
字段定义 :=
| [static] [mutable] 识别符 : 类型名
成员定义 :=
| [ static ] member 成员绑定
| (override|default) 成员绑定
| 构造器定义
| abstract 签名定义
| val [mutable] 值、签名成员
构造器定义 :=
| new 模式 [as 识别符] = 构造器表达式
构造器表达式 :=
| ';'文字 构造器表达式
| 构造器表达式 then 表达式
| if 表达式 then 构造器表达式 else 构造器表达式
| let 变量声明 in 构造器表达式
| 对象的初始化表达式
对象的初始化表达式 :=
| '{' [ inherit 表达式; ] 字段绑定 '}'
| new 类型 表达式
相关文章推荐
- F#入门-第四章 面向对象-第五节 继承
- F#入门-第四章 面向对象-第三节 成员函数
- F#入门-第四章 面向对象-第四节 封装
- F#入门-第四章 面向对象-第七节 接口
- F#入门-第四章 面向对象-第一节 对象
- F#入门-第四章 面向对象-第八节 对象表达式
- F#入门-第四章 面向对象-第十一节 活动模式
- F#入门-第五章 F#开发实例-第二节 创建文字编辑器(二)
- F#入门-第四章 面向对象-第六节 重载
- F#入门-第一章 概述-第二节 关于F#
- F#入门-第四章 面向对象-第九节 索引器
- F#入门-第三章 功能性-第二节 高阶函数(map)
- Java语言入门 -- 第四章 Java应用程序的基本结构
- 第四章:面向对象(上)
- JavaScript面向对象轻松入门之综合
- Objective-c语言_面向对象(便利初始化函数,构造器和多态的结合)
- 【PHP面向对象(OOP)编程入门教程】17.克隆对象__clone()方法
- Sencha Touch 快速入门2.0 第四章 Api文档看懂了吗?
- 使用C语言进行面向对象的开发--GObject入门[3]
- 使用C语言进行面向对象的开发--GObject入门[8]