Reflection uses the object of type Type that describes assemblies, modules and types.
Using reflection, it is possible to do many things, for example:
- Dynamically create object instances. 
 - Dynamically invoke methods. 
 - Check if an object implements an interface. 
 - Manipulate attributes set on objects. 
 - Mock values for testing. 
 - Retrieve debug information. 
 
These are just a few things you can do with it. In this article I will show a simple example of how to use it to get descriptions of enums.
Let us say you want to display an enum in a dropdown. However, you want to have the code and description rather than just displaying the code. You can annotate your enum with the description attribute:
- public enum PurposeKind    
 - {    
 -     Development,    
 -      
 -     [Description("Functional Test")]    
 -     Test,    
 -      
 -     [Description("Unit Test")]    
 -     UnitTest,    
 - }  
 
 And to get the description we can use reflection. I will be getting the value and description and then I will add it to a dictionary as in the following:
- static void Main(string[] args)    
 - {    
 -     var valuesAndDescriptions = new Dictionary<PurposeKind, string>();    
 -      
 -       
 -       
 -     Type enumType = typeof(PurposeKind);    
 -      
 -       
 -     var enumValues = enumType.GetEnumValues();    
 -      
 -     foreach (PurposeKind value in enumValues)    
 -     {    
 -           
 -           
 -         MemberInfo memberInfo =    
 -             enumType.GetMember(value.ToString()).First();    
 -      
 -           
 -           
 -         var descriptionAttribute =    
 -             memberInfo.GetCustomAttribute<DescriptionAttribute>();    
 -      
 -           
 -         if (descriptionAttribute != null)    
 -         {    
 -             valuesAndDescriptions.Add(value,    
 -                 descriptionAttribute.Description);    
 -         }    
 -         else    
 -         {    
 -             valuesAndDescriptions.Add(value, value.ToString());    
 -         }    
 -     }    
 - }  
 
 Results:
Development,Development
Test,Functional Test
UnitTest,Unit Test
See System.Type on MSDN for a reference of reflection methods.