• 静态构造函数


      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();
            }
        }
  • 相关阅读:
    file
    shell脚本的执行
    添加源,删除源
    lsattr, chattr
    umask
    od
    init
    sync
    wc
    history
  • 原文地址:https://www.cnblogs.com/25miao/p/9870974.html
Copyright © 2020-2023  润新知