Reflection in C#

Reflection objects are used for obtaining type information at runtime. The classes that give access to the metadata of a running program are in the System.Reflection namespace.

The following are the applications of Reflections −

  • It allows view attribute information at runtime.

  • It allows examining various types in an assembly and instantiate these types.

  • It allows late binding to methods and properties

  • It allows creating new types at runtime and then performs some tasks using those types.

Let us see an example −


using System;

public class HelpAttribute : System.Attribute {
   public readonly string Url;

   public string Topic // Topic is a named parameter {
      get {
         return topic;
      set {
         topic = value;
   public HelpAttribute(string url) // url is a positional parameter {
      this.Url = url;
   private string topic;

[HelpAttribute("Information on the class MyClass")]
   class MyClass {

namespace AttributeAppl {
   class Program {
      static void Main(string[] args) {
         System.Reflection.MemberInfo info = typeof(MyClass);
         object[] attributes = info.GetCustomAttributes(true);

         for (int i = 0; i < attributes.Length; i++) {