Calling of Static Constructor and Instance Constructor
<p>As I know Constructors of parent class is called first and then child Class.But why In Case of static Constructor It executes from derived Class first and then Child Class?</p>

<pre><code>namespace ConsoleApplication1

    {

 class Program

    {

        static void Main(string[] args)
        {
            Child t = new Child();
        }
    }

    class Parent
    {
        public  Parent()
        {
            Console.WriteLine("Parent Instance Constructor");
            Console.ReadKey();
        }

        static Parent()
        {
            Console.WriteLine("Parent Static Constructor");
            Console.ReadKey();
        }
    }
    class Child : Parent
    {
        public Child()
        {
            Console.WriteLine("Child Instance Constructor");
            Console.ReadKey();
        }

        static Child()
        {
            Console.WriteLine("Child Static Constructor");
            Console.ReadKey();
        }
    }
}
</code></pre>

<p><strong>Output:</strong></p>

<blockquote>
  <p>Child Static Constructor</p>
  
  <p>Parent Static Constructor</p>
  
  <p>Parent Instance Constructor</p>
  
  <p>Child Instance Constructor</p>
</blockquote>

<p>Now As per <strong>Jeppe Stig Nielsen</strong> Suggestion when i have intialised static fields in constructors,it is running in following order</p>

<p><strong>Output</strong></p>

<blockquote>
  <p>Parent Static Constructor</p>
  
  <p>Child Static Constructor</p>
  
  <p>Parent Instance Constructor</p>
  
  <p>Child Instance Constructor</p>
</blockquote>

<pre><code>class XyzParent
{
    protected static int FieldOne;
    protected int FieldTwo;

    static XyzParent()
    {
        // !  
        FieldOne = 1;
        Console.WriteLine("parent static");
    }
    internal XyzParent()
    {
        // !  
        FieldOne = 10;
        // !  
        FieldTwo = 20;
        Console.WriteLine("parent instance");
    }
}
class XyzChild : XyzParent
{
    static XyzChild()
    {
        // !  
        FieldOne = 100;
        Console.WriteLine("child static");
    }
    internal XyzChild()
    {
        // !  
        FieldOne = 1000;
        // !  
        FieldTwo = 2000;
        Console.WriteLine("child instance");
    }
}
</code></pre>

<p>why such contradictory behaviour?</p>
