What is Reflection?
It extends the advantages of metadata by allowing developers to inspect and use it at runtime. For example, dynamically determine all the classes contained in a given assembly and invoke their methods.
Reflection gives objects that encapsulate assemblies, modules, and types. You can use reflection to dynamically make an instance of a type, bind the type to an existing object, or get the type from an existing object. You can then invoke the type's methods or access its fields and properties.