Trừ khi bạn đang làm điều gì đó phức tạp, tôi khuyên bạn nên sử dụng hồ sơ thay vì các lớp học. Về cơ bản, họ là lớp học với tính năng bổ sung: không thay đổi, bình đẳng về cơ cấu, mô hình phù hợp, vv:
type Playlists = {
Albums: DbSet;
Genres: DbSet
}
Bạn có thể nhận các lĩnh vực kỷ lục của một cách dễ dàng:
let p = {Albums = ...; Genres = ...}
let albums = p.Albums
let genres = p.Genres
Trong hồ sơ lĩnh vực mặc định là không thay đổi; bạn có thể khai báo các trường có thể thay đổi trong các bản ghi, nhưng nó được coi là một thực hành không tốt. Mặc dù bạn không thể đặt thuộc tính, bạn có thể tạo bản ghi mới từ một tệp cũ. Mặc định tính bất biến là bình thường không phải là một vấn đề, hơn nữa nó làm cho mã chức năng hơn và dễ dàng hơn để suy luận về:
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}
Nếu bạn nhấn mạnh để tạo ra các lớp học, sử dụng một constructor với các thông số rõ ràng được đề nghị:
type Playlists(a: DbSet, g: DbSet) =
let mutable albums = a
let mutable genres = g
// ...
Khi một constructor mặc định là cần thiết, bạn có thể sử dụng Unchecked.default<'T>
cho các lĩnh vực phi nullable, hoặc tốt hơn sử dụng nhà thầu mặc định của họ:
// Set fields using dump values
let mutable albums = new DbSet()
let mutable genres = new DbSet()
Nhưng hãy chắc chắn rằng bạn thiết lập các trường đó trước khi sử dụng chúng.
Một điều - ngoài câu trả lời tuyệt vời của Pad và TomasPetricek: nếu bạn thực sự cố gắng "hoạt động" thì tôi sẽ kiểm tra giả định rằng bạn cần lớp học hoặc lớp học- như cấu trúc ở nơi đầu tiên. Thuộc tính tự động vi phạm ẩn thông tin tốt bằng cách phơi bày bên trong của một lớp nhất định cho phần còn lại của ứng dụng. Nếu bạn cần phần bên trong của một lớp tiếp xúc với phần còn lại của ứng dụng thì có thể bạn không cần lớp học ngay từ đầu. Tôi đoán tôi đang nói nếu bạn thực sự muốn suy nghĩ về mặt chức năng để loại bỏ ý tưởng rằng mọi thứ phải ở trong một lớp học. –
Oh và một điều nữa - với những gì bạn đang làm việc, bạn có thể thấy bài đăng trên blog này hữu ích: http://bugsquash.blogspot.com/2011/11/lenses-in-f.html –