除非你正在做一些複雜的事情,否則我會建議使用記錄而不是類。基本上,他們是用額外的功能類:不變性,結構相等,模式匹配等:
type Playlists = {
Albums: DbSet;
Genres: DbSet
}
你可以記錄的領域很容易:
let p = {Albums = ...; Genres = ...}
let albums = p.Albums
let genres = p.Genres
在默認情況下記錄的字段是不可變的;您可以在記錄中聲明可變字段,但這被認爲是不好的做法。儘管您無法設置屬性,但您可以從舊的創建新記錄。默認不變性通常是沒有問題的,而且它使代碼更實用,更容易推理:
let p = {Albums = a; Genres = g}
// Create new records by updating one field
let p1 = {p with Albums = a1}
let p2 = {p with Genres = g2}
如果你堅持創建類,使用具有明確參數的構造函數建議:
type Playlists(a: DbSet, g: DbSet) =
let mutable albums = a
let mutable genres = g
// ...
當一個默認的構造函數是必要的,你可以使用Unchecked.default<'T>
非可空場,或更好地使用它們的默認構造函數:
// Set fields using dump values
let mutable albums = new DbSet()
let mutable genres = new DbSet()
但請確保在實際使用它們之前設置了這些字段。當你需要一個可變財產
來源
2012-02-08 09:55:53
pad
一件事 - 除了打擊墊和TomasPetricek的優秀的答案:如果你真的想成爲「功能性」,那麼我會檢查你需要的類或類 - 的假設就像結構一樣。自動屬性通過將給定類的內部暴露給應用程序的其餘部分來違反良好的信息隱藏。如果你需要一個類的內部暴露給應用程序的其餘部分,那麼也許你並不需要這個類。我想我說的是,如果你真的想從功能上去消除一切必須在課堂上的想法。 – 2012-02-08 11:17:13
噢,還有一件事 - 考慮到您正在處理的內容,您可能會發現此博客文章有用:http://bugsquash.blogspot.com/2011/11/lenses-in-f.html – 2012-02-08 16:25:59