Reflection allows viewing metadata and dynamically invoking methods of classes at runtime. It allows discovering and using new classes without recompiling. Key reflection types include System.Type, System.Reflection.Assembly, and MemberInfo. The Type object provides metadata like methods and properties. Assembly loads metadata for a DLL. MemberInfo is the base for method and property metadata. Reflection is used for documentation, plugins, adaptive solutions, and converting scripts to compiled code.