Reflection remains a second-class citizen in current programming models, where it's assumed to be imperative and tightly bound to its implementation. In contrast, most object-oriented APIs allow interfaces to vary independently of their implementations. Components take this separation a step further by describing unforeseeable attributes--the key to pluggable third-party components. This paper describes how reflection can benefit from a similar evolutionary path.
David H. Lorenz, John M. Vlissides