静态构造函数
class Program14 { public class A { public static string strText; public string Text; static A() { strText = "AAA"; } public A() { Text = "AAAAAAAAAAAAAAAAAAAAAAAAAA"; } } public class B : A { static B() { strText = "BBB"; } public B() { Text = "BBBBBBBBBBBBBBBBB"; } } static void Main1444(string[] args) { //当显示B.strText的时候,因为B继承自A,所以会首先调用A的静态构造函数,但是因为静态构造函数只会调用一次,所以不会调用A的静态构造函数,但是又因为strText属于类A,而不是B,所以B得静态构造函数不会执行,故输出的均为AAA。 Console.WriteLine(A.strText); Console.WriteLine(B.strText); Console.Read(); } }
再看另外一种情况:
class Program15 { public class A { public static string strText; public string Text; static A() { strText = "AAA"; } public A() { Text = "AAAAAAAAAAAAAAAAAAAAAAAAAA"; } } public class B : A { static B() { strText = "BBB"; } public B() { Text = "BBBBBBBBBBBBBBBBB"; } } static void Main(string[] args) { //请注意我在开始部分对类进行了实例化,那么此时的输出结果就是均为BBB。 //为什么会有这样的情况出现呢,其实还是要从静态构造函数的调用时机入手。 //首先我们实例化了B,此时会调用B的静态构造函数, //但是因为strText是A的静态变量,所以首先会先调用A的静态构造函数将strText赋值为AAA, //此时又会调用B的静态构造函数将strText赋值为BBB,所以此时strText的值应该为BBB,所以输出均为BBB。 B b = new B(); A a = new A(); Console.WriteLine(A.strText); Console.WriteLine(B.strText); Console.Read(); } }