zoukankan      html  css  js  c++  java
  • 静态构造函数

      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();
            }
        }
  • 相关阅读:
    hadoop用到的shell脚本
    hadoop搭建完全分布式集群
    hadoop搭建伪分布式集群
    ARM Compute Library编译安装
    OpenBlas交叉编译安装
    正则表达式去除所有标签html标签
    xstream实现xml字符串与对象直接的转换
    spring-boot中使用mybatis-plus代码生成器让你轻松的完成单表的CURD
    开源、免费软件和网站分享
    2020春软件工程助教工作期末总结
  • 原文地址:https://www.cnblogs.com/25miao/p/9870974.html
Copyright © 2011-2022 走看看