Supongo que las clases anidadas no eran una característica central del modelo de objetos .NET y simplemente se soltaron para guardar los recursos. Puede haber algunas dificultades técnicas (es decir, con visibilidad o con definiciones de tipo recursivo), pero no creo que eso sea un problema importante.
Durante muchos casos en los que se utilizarían clases anidadas en C#, como iteradores, puede muy bien utilizar expresiones de objetos, por lo que supongo que son de alguna sustitución de formas para las clases anidadas:
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 }
Aunque se trata de bastante similar a las clases anidadas, no se compila como clase anidada
y el cuerpo de una expresión de objeto no puede acceder a los miembros privados de
Collection
. Supongo que esto podría complicar un poco la compilación de expresiones, porque las expresiones de objetos pueden aparecer fuera del contexto de una clase ...
En realidad, es posible acceder a private
miembros desde la expresión del objeto, aunque el código todavía no está compilado como una clase anidada. Ver comentarios para más detalles.
Admite clases anidadas (estáticas): 'módulo X = módulo Y = let j = 3 ;;' –