Reflection is a feature that allows information about a type to be obtained. Using this information, objects may be constructed and used at runtime. Functionality may be added to a program dynamically.
The term reflection is used because of the way in which the process works. An object of Type mirrors the underlying type that it represents. To obtain information, Type is queried and it returns (reflects) information associated with the underlying type. Reflection allow capabilities of types that are only known at runtime to be used.