F#入门-第四章 面向对象-第九节 索引器

    与方法同样,属性也可以接受参数。这种属性叫做索引器。使用接下来我们要介绍的Item属性,我们可以创建与访问普通数组同样方法进行访问的类。

    要利用索引器,需要在成员名后使用with。这时,引用值时定义get访问器,设定值时定义set访问器。

Item索引器
type JokeArray = class
    val private data : int array
    new (ar) as this = {data = Array.copy ar}
    member x.Item
        with get i = x.data.[i-i%2]
        and set i v = x.data.[i-i%2]<-v
    end;;
let a = new JokeArray([|0..9|]) in
//值的设定
a.[7]<-10;
//值的引用
for i=0 to 9 do print_int (a.Item(i));print_endline "" done
//值的引用(只适用于Item索引器)
for i=0 to 9 do print_int a.[i];print_endline "" done;


    在这个例子中,定义了将所有第奇数个的元素忽略,只设置与返回第偶数个元素(第奇数个元素的时候设置与返回该元素的上一个元素)的数组JokeArray。

    通过定义get访问器,可以通过obj.索引器名的形式引用值。同时,只有变量名为Item的情况下,可以通过与数组访问形式相同的[]来进行访问。如果可以设置值的话,内部数据当然是mutable的数据。

    作为补充信息介绍一下,根据Foundations of F#上的记载,使用Item之外的索引器时,在其他.Net的语言中要访问这个类会很困难。因此,如果要与其他语言相互访问时,最好经常使用Item索引器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值