2010-11-21 19 views
6

voy sobre algunos C# tutorial que indica lo siguiente:.creación de objetos en C# pregunta

"Después de que encuentre la clase de atributo, el compilador comprobará si se permite que el atributo en una clase A continuación, se comprobará para un constructor que coincida con los parámetros especificados en el uso del atributo. Si encuentra uno, crea una instancia del objeto llamando al constructor con los valores especificados "

El nombre de este párrafo es" proceso de compilación "y se refiere a la forma en que el compilador maneja los atributos. Lamento la ignorancia, pero ¿no deberían crearse instancias en tiempo de ejecución?

Gracias.

+2

Al buscar esa cotización se devuelve exactamente 1 resultado: esta pregunta. ¿De donde lo sacaste? – dtb

+0

Parece que el compilador aquí se usa como sinónimo de "código que genera el compilador". – Hogan

Respuesta

3

Los atributos definen metadatos para las clases: cada instancia de la clase (es decir, el objeto) compartirá los mismos valores de atributo. Estos metadatos se almacenan junto con la definición de tipo, que se calcula una vez en el momento de la compilación a partir de los archivos fuente.

1

Hay un proceso de "compilación" que genera un código intermediario que se interpreta con .NET framework.

Es por eso que están hablando sobre el proceso de compilación.

2

Dado que hay atributos que también affect the compiler, no me sorprendería si el compilador hizo instanciarlos al compilar. ¿Y qué?

+0

No sabía que el compilador crea una instancia de los objetos. – user429400

+1

Suena bastante improbable. Dudo que el compilador crea instancias de atributos (es decir, llama al constructor de un atributo definido por el usuario). – CodesInChaos

+0

¿cómo podría un compilador crear una instancia de un objeto? – miguel

0

El compilador solo crea metadatos que describen la construcción del atributo y las asignaciones a sus propiedades. El atributo en sí mismo solo se crea una instancia en el momento en que usa el reflejo para enumerar los atributos. Creo que cada llamada a la reflexión crea una nueva instancia de ese atributo.

Y creo que hay una manera (relacionada con contextos solo de reflexión) de verificar el atributo directamente desde el meta sin instanciarlo en absoluto.