REFLECTION with STATIC in C#

The following program explains the usage of reflection principle with static.

Example:
using System;
using System.Reflection;

namespace forgetCode
{

    class Chennai
    {
        static Chennai()
        {
            Console.WriteLine("Chennai loaded");
        }
    }


    class Delhi
    {
        static Delhi()
        {
            Console.WriteLine("Delhi loaded");
        }

        public static string special = "Capital city";
    }
    class Mumbai
    {
        static Mumbai()
        {
            Console.WriteLine("Mumbai loaded");
        }
    }

    public class SweetShop
    {
        public static void Main()
        {
            Console.WriteLine("Inside Main");
            new Chennai();
            Console.WriteLine("After creating Chennai");
            Type t = Type.GetType("Delhi");
            Console.WriteLine("After Type.GetType(\"Delhi\")");
            Console.WriteLine(Delhi.special);
            Console.WriteLine("Before creating Mumbai");
            new Mumbai();
            Console.WriteLine("After creating Mumbai");
        }
    }

}

Output:
Inside Main
Chennai loaded
After creating Chennai
After Type.GetType("Delhi")
Delhi loaded
Capital city
Before creating Mumbai
Mumbai loaded
After creating Mumbai

You can see that each Class object is loaded only when it’s needed, and the static constructor is run immediately prior to when data from the Type is needed (in this case, the static string that told the Delhi's special).
This is in slight contrast to Java, which instantiates the static state of a type immediately upon class loading.