zoukankan      html  css  js  c++  java
  • 子类如果不实例化则不会调用它自身的静态构造函数

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication6
    {
        class Program
        {
            static void Main(string[] args)
            {
                #region 如果注释掉, 则Stat2.Instance为null 报错
                Stat1.DoSth();
    
                Stat2 st2 = new Stat2();
                #endregion
    
                Stat2.DoSth();
    
                Console.ReadKey();
            }
        }
    
        class Stat1
        {
            public static Stat1 Instance;
            //static Stat1()
            //{
            //    Console.WriteLine("Stat1 Static Structor");
            //}
            public static void DoSth()
            {
                Instance.Do();
            }
    
            static Stat1()
            {
                Console.WriteLine("Stat1 Static Costructor");
                Instance = new Stat1();
            }
    
            public virtual void Do()
            {
                Console.WriteLine("Stat1 Do");
            }
        }
    
        class Stat2 : Stat1
        {
            static Stat2()
            {
                Console.WriteLine("Stat2 Static Costructor");
                Instance = new Stat2();
            }
    
            public override void Do()
            {
                Console.WriteLine("Stat2 Do");
            }
        }
    }

    Stat1这个基类如果不实例化,直接使用它的静态方法,是先调用了它静态构造函数的。
    但是Stat2这个子类如果不实例化,则既不会调用Stat1基类的构造函数,也不会调用Stat2它自己的静态构造函数。

    这是不是很奇怪?

  • 相关阅读:
    net异步编程
    二维码的生成细节和原理
    4605 Magic Ball Game
    (Java实现) 子集和问题
    (Java实现) 组合的输出
    (Java实现) 自然数的拆分
    (Java实现) 装载问题
    (Java实现) 整数区间
    (Java实现) 最佳调度问题
    (Java实现) 最佳调度问题
  • 原文地址:https://www.cnblogs.com/bwangel/p/static-constructor.html
Copyright © 2011-2022 走看看