Reflexión permite que un programa inspeccione y manipule tipos, métodos y propiedades en tiempo de ejecución — incluso aquellos desconocidos en tiempo de compilación. Atributos adjuntan metadatos declarativos al código que herramientas y marcos leen (a menudo mediante reflexión) para controlar el comportamiento. Juntos impulsan gran parte de la "magia" del marco .NET (serialización, inyección de dependencias, ORMs, validación).
