Ответ 1
Я полагаю, что вложенные классы не были основной особенностью объектной модели .NET, и она просто была удалена, чтобы сохранить ресурсы. Могут быть некоторые технические трудности (то есть с видимостью или с рекурсивными определениями типов), но я не думаю, что это была бы серьезная проблема.
Во многих случаях, когда можно использовать вложенные классы в С#, например, итераторы, вы можете красиво использовать выражения объектов, поэтому я предполагаю, что они в какой-то мере заменяют вложенные классы:
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 }
Хотя это очень похоже на вложенные классы, он не компилируется как вложенный класс , а тело выражения объекта не может получить доступ к закрытым членам Collection
. Я предполагаю, что поддержка этого затруднит компиляцию выражений, поскольку выражения объектов могут появляться вне контекста класса...
На самом деле, можно получить доступ к private
членам из выражения объекта, хотя код все еще не скомпилирован как вложенный класс. Подробнее см. Комментарии.