子类如果不实例化则不会调用它自身的静态构造函数

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication6
{
    class Program
    {
        static void Main(string[] args)
        {
            #region 如果注释掉, 则Stat2.Instance为null 报错
            Stat1.DoSth();

            Stat2 st2 = new Stat2();
            #endregion

            Stat2.DoSth();

            Console.ReadKey();
        }
    }

    class Stat1
    {
        public static Stat1 Instance;
        //static Stat1()
        //{
        //    Console.WriteLine("Stat1 Static Structor");
        //}
        public static void DoSth()
        {
            Instance.Do();
        }

        static Stat1()
        {
            Console.WriteLine("Stat1 Static Costructor");
            Instance = new Stat1();
        }

        public virtual void Do()
        {
            Console.WriteLine("Stat1 Do");
        }
    }

    class Stat2 : Stat1
    {
        static Stat2()
        {
            Console.WriteLine("Stat2 Static Costructor");
            Instance = new Stat2();
        }

        public override void Do()
        {
            Console.WriteLine("Stat2 Do");
        }
    }
}

Stat1这个基类如果不实例化,直接使用它的静态方法,是先调用了它静态构造函数的。
但是Stat2这个子类如果不实例化,则既不会调用Stat1基类的构造函数,也不会调用Stat2它自己的静态构造函数。

这是不是很奇怪?

原文地址:https://www.cnblogs.com/bwangel/p/static-constructor.html