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它自己的静态构造函数。
这是不是很奇怪?