Tôi cho rằng các lớp lồng nhau không phải là tính năng cốt lõi của mô hình đối tượng .NET và nó chỉ đơn giản là bị loại bỏ để lưu tài nguyên. Có thể có một số khó khăn về kỹ thuật (tức là với khả năng hiển thị hoặc với định nghĩa kiểu đệ quy), nhưng tôi không nghĩ đó sẽ là một vấn đề lớn.
Đối với nhiều trường hợp người ta sẽ sử dụng lớp lồng nhau trong C#, chẳng hạn như vòng lặp, bạn độc đáo có thể sử dụng các biểu tượng, vì vậy tôi đoán họ đang có trong một số thay thế cách cho các lớp lồng nhau:
type Collection() =
member x.GetEnumerator() =
let n = ref 0
{ new IEnumerator with
member x.Current = box n.Value
member x.MoveNext() = incr n; true
member x.Reset() = n := 0 }
Mặc dù đây là khá giống với các lớp lồng nhau, nó không được biên dịch như lớp lồng nhau
và phần thân của biểu thức đối tượng không thể truy cập các thành viên riêng của
Collection
. Tôi đoán hỗ trợ điều này sẽ phức tạp biên dịch các biểu thức một chút, bởi vì các biểu thức đối tượng có thể xuất hiện bên ngoài một bối cảnh lớp học ...
Thực tế, có thể truy cập private
thành viên từ biểu thức đối tượng, mặc dù mã vẫn không được biên dịch thành một lớp lồng nhau. Xem nhận xét để biết chi tiết.
Nguồn
2012-01-20 22:46:25
Nó hỗ trợ lớp lồng nhau (tĩnh): 'module X = module Y = let j = 3 ;;' –