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索引器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章