• 一、.Net基础【1.20】Static静态构造函数


    1.静态构造函数 

    静态构造函数在类第一次被使用的时候执行一次,在构造函数执行之前执行。只要用到类,哪怕没new对象(比如只是声明变量)也会被执行,且只执行一次。

    2.注意事项

    1. 静态构造函数既没有访问修饰符,也没有参数。因为是.NET调用的,所以像public和private等修饰符就没有意义了。
    2. 是在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类,也就是说我们无法直接调用静态构造函数,也就无法控制什么时候执行静态构造函数了。
    3. 一个类只能有一个静态构造函数。
    4. 无参数的构造函数可以与静态构造函数共存。尽管参数列表相同,但一个属于类,一个属于实例,所以不会冲突。
    5. 最多只运行一次。
    6. 静态构造函数不可以被继承。
    7. 如果没有写静态构造函数,而类中包含带有初始值设定的静态成员,那么编译器会自动生成默认的静态构造函数。

    3.例子

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace console2
    {
        class MyTest
        {
            static MyTest()
            {
                Console.WriteLine("zi 静态代码块");
            }
            public MyTest()
            {
                Console.WriteLine("zi 构造方法");
            }
        }
    }
    
    //主函数
    using System;
    using System.Collections.Generic;
    using System.Data.SqlClient;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace console2
    {
        class Program
        {
            static void Main(string[] args)
            {
                MyTest t1 = new MyTest();
                MyTest t2 = new MyTest();
                Console.ReadKey();
            }
        }
    }
    //输出结果:
    // zi 静态代码块
    // zi 构造方法
    // zi 构造方法。

     4.静态成员初始化问题代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace console2
    {
        class MyJingTaiDaimaKuai
        {
            public static int i = test1();//最开始执行
            public int age = test2();//new的时候先执行成员变量的初始化,再执行构造函数
    
            static MyJingTaiDaimaKuai()
            {
                Console.WriteLine("静态代码块");//再执行
            }
            public MyJingTaiDaimaKuai()
            {
                Console.WriteLine("构造函数");
            }
    
            public static int test1()
            {
                Console.WriteLine("test1");
                return 3;
            }
    
            public static int test2()
            {
                Console.WriteLine("test2");
    
                return 333;
            }
        }
    }
    //主函数
    using System;
    using System.Collections.Generic;
    using System.Data.SqlClient;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace console2
    {
        class Program
        {
            static void Main(string[] args)
            {
                MyJingTaiDaimaKuai a1 = new MyJingTaiDaimaKuai();
                Console.WriteLine(a1.age);
    
                MyJingTaiDaimaKuai a2 = new MyJingTaiDaimaKuai();
                Console.WriteLine(a2.age);
                Console.ReadKey();
            }
        }
    
    }

  • 相关阅读:
    LeetCode 12. Integer to Roman
    个人博客09
    个人博客08
    人机交互之我的输入法
    学习进度条(第六周)
    《梦断代码》阅读笔记02
    个人博客07
    学习进度条(第五周)
    个人博客06
    个人博客05
  • 原文地址:https://www.cnblogs.com/lolitagis02/p/8094905.html
Copyright © 2020-2023  润新知