Reflection is a generic term that describes the ability to inspect and dmanipulate program elements at runtime. For example, reflection allows you to:
1. Enumrate the members of a type
2. Instantiate a new object
3. Execute the member of an object
4. Find out the information about a type
5. Find out the information about a assembly
6. Inspect the custom attributes applies to a type.
7. Create and compile new assembly