静态构造函数

  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();
        }
    }

 

posted @ 2018-10-29 15:39  幸福安康  阅读(159)  评论(0编辑  收藏  举报