A meno che non si stia facendo qualcosa di complesso, consiglierei di utilizzare i record anziché le classi. In sostanza, essi sono classi con caratteristiche extra: immutabilità, l'uguaglianza strutturale, pattern matching, ecc:
type Playlists = {
Albums: DbSet;
Genres: DbSet
}
È possibile ottenere i campi di registrare facilmente:
let p = {Albums = ...; Genres = ...}
let albums = p.Albums
let genres = p.Genres
Nei campi di record predefiniti sono immutabili; puoi dichiarare campi mutabili nei record, ma è considerato una cattiva pratica. Sebbene non sia possibile impostare le proprietà, è possibile creare un nuovo record da uno vecchio. immutabilità di default non è normalmente un problema, inoltre, rende il codice più funzionale e più facile ragionare su:
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}
Se si insiste a creare classi, utilizzando un costruttore con parametri espliciti è consigliato:
type Playlists(a: DbSet, g: DbSet) =
let mutable albums = a
let mutable genres = g
// ...
Quando un costruttore di default è necessario, è possibile utilizzare Unchecked.default<'T>
per i campi non annullabili, o meglio usare i loro costruttori predefiniti:
// Set fields using dump values
let mutable albums = new DbSet()
let mutable genres = new DbSet()
Ma assicurati di aver impostato quei campi prima di usarli effettivamente.
Una cosa - oltre a Pad ed eccellenti risposte di TomasPetricek: se si sta veramente cercando di essere "funzionale" quindi vorrei esaminare il presupposto che avete bisogno di classi o classe- come strutture in primo luogo. Le proprietà automatiche violano la buona conoscenza delle informazioni esponendo le parti interne di una determinata classe al resto dell'app. Se ti serve l'interno di una classe esposta al resto dell'app, allora forse non hai bisogno della classe in primo luogo. Suppongo che stia dicendo che se vuoi davvero pensare a una cosa funzionalmente, togliti l'idea che tutto debba essere in una classe. –
Oh e un'altra cosa: visto ciò su cui stai lavorando, potresti trovare utile questo post sul blog: http://bugsquash.blogspot.com/2011/11/lenses-in-f.html –