首页 > 代码库 > 子类如果不实例化则不会调用它自身的静态构造函数

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

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它自己的静态构造函数。

这是不是很奇怪?