La documentación de MSDN le informa sobre la implementación particular que el compilador de Microsoft C# usa para struct
. Esos detalles particulares no están en la especificación ECMA 334 C#; no son parte de la semántica de struct
s. Por lo tanto, esos detalles en la documentación son detalles de implementación.
Me parece recordar haber leído en algún lado a Eric Lippert diciendo que desea (o prefiere, no recuerdo qué nivel de preferencia proporcionó) que la documentación no mencionó la pila en relación con struct
s. Veré si puedo desenterrarlo.
aquí está, desde la entrada de blog que se ha vinculado a:
Lamento que la documentación no se centra en lo que es más relevante; al centrarnos en un detalle de implementación en gran parte irrelevante, aumentamos la importancia de ese detalle de implementación y oscurecemos la importancia de lo que hace que un tipo de valor sea semánticamente útil. Deseo sinceramente que todos los artículos que explican qué es "la pila" pasen más tiempo explicando qué significa exactamente "copiado por valor" y cómo la incomprensión o el uso indebido de "copiar por valor" puede causar errores.
La sección correspondiente de la especificación ECMA 334 C# es §11. Tenga en cuenta que la palabra "pila" nunca se usa en esta sección. La sección simplemente explica la sintaxis, que struct
sigue la semántica de valores, que están sellados implícitamente y heredan de System.ValueType
, que la asignación a una variable del tipo struct
crea una copia, que al pasar un struct
como un parámetro por valor crea una copia, cómo struct
s se ajustan a valores por defecto (todos los campos de tipo de valor en el struct
se establecen en sus valores por defecto, y todos los campos de tipo de referencia se establecen en null
), las reglas que rodean el boxeo y unboxing de struct
, el significado de this
para struct
s , y cómo la inicialización de campo, los constructores, los destructores y los constructores estáticos funcionan para struct
s. Nuevamente, no hay mención de pilas. Nunca.
La pila es un detalle de implementación, no parte de la semántica de struct
.
relacionado con la pregunta: http://stackoverflow.com/questions/1970894/struct-what-is-it-for/1970902#1970902 –
Acabo de marcar eso como duplicado hace un tiempo :) – RCIX