7.1.2 c# 中的函式式資料結構
我們曾經用 c# 實現過幾個函式式不可變資料型別,比如 funclist 或元組。在 c# 中,是通過以特殊方式寫類來實現的,最重要的是,所有屬性必須是不可變的,這是通過使用唯讀字段,或者通過宣告的屬性具有私有的 setter,且只在類的建構函式中設定來實現。在清單 7.3 中,我們使用第一種方法實現似於類清單 7.1 中 rect 型別的類。
清單 7.3 不可變 rect 型別 (c#)
public sealed class rect } | 返回唯讀屬性的值
public float top } |
public float width } |
public float height } |
public rect(float left, float top,float width, float height)
var moved = rc.withleft(10.0f);
最重要的一點是,我們不必顯式讀取 rect 類的所有屬性,只要列出更改過的屬性。這種語法非常優雅,即使我們想要修改屬性不止乙個:
var moved =rc.withleft(10.0f).withtop(10.0f);
正如我們在此示例中所看到的,我們經常需要同時設定兩個相關的屬性。如果經常發生這種情況,更方便的方法是,新增新的方法以建立乙個副本,並修改所有相關的屬性。在我們的示例中,我們也可以新增方法withposition 和 withsize,因為,它們表示的操作很常用;如果每次單獨改變建立的物件不是正確的狀態,而只有組合的操作才表示有效的狀態變化,這種情況下也是必需建立的。
對於 f# 的記錄型別,我們現在就需要了解這些,在第九章我們還要再討論 .net 中的函式式資料型別。在下一節,我們將開始討論乙個大型示例程式,這是本章的重點,會涉及表示程式資料的通常方法。
7 1 2 C 中的函式式資料結構
7.1.2 c 中的函式式資料結構 我們已經在 c 中實現了幾個函式式的不可變資料型別,比如 funclist 或元組。在 c 中,我們會通過寫一類特定的方式實現。最重要的是,所有屬性必須是不可變的。這可以通過使用唯讀字段,或者通過宣告私有的 setter 屬性,只在類的建構函式中設定。在清單 7....
7 1 函式式資料結構
7.1 函式式資料結構 用函式程式設計,程式處理的資料總是儲存在資料結構中。資料結構和物件之間的區別在於,資料結構公開了表示資料 從名字就可以知道 的結構 知道了資料的結構便於寫處理的 但要到第九章才討論,f 還提供了一種封裝結構的方法,如同物件導向程式設計,當我們想從庫中匯出 f 資料結構,或者用...
C 基礎 C 中的資料結構
陣列具有以下的特點 陣列屬於線性結構,在記憶體中是連續存放的。陣列的元素型別必須相同。陣列可以直接通過下標訪問。陣列的查詢速度非常快,新增和刪除速度慢。陣列在初始化時要指定陣列長度。動態陣列具有以下的特點 arraylist的底層其實就是乙個陣列。arraylist在宣告時不必指定長度,會根據儲存的...