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();
            }
        }
  • 相关阅读:
    Day03_企业权限管理(SSM整合)
    Day02_企业权限管理(SSM整合)
    Day01_企业权限管理(SSM整合)
    MacOS下ElasticSearch学习(第一天)
    MacOS下Git安装及使用
    Hadoop 之 HDFS
    大数据采集、清洗、处理:使用MapReduce进行离线数据分析完整案例
    深入浅出爬虫之道: Python、Golang与GraphQuery的对比
    深入浅出分布式文件存储系统之 Ceph 的实现
    Pastebot—剪切板管理工具
  • 原文地址:https://www.cnblogs.com/25miao/p/9870974.html
Copyright © 2011-2022 走看看