C#静态构造函数特点和应用

本文深入探讨了C#中静态构造函数的特点、执行时机、使用场景等核心内容,通过示例展示了如何在类初始化时利用静态构造函数进行资源预加载和初始化操作,特别强调了其与实例构造函数的区别以及在类结构设计中的价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

静态构造函数

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

二 :需求
    1.为什么使用静态构造函数?
    类有一些静态字段和属性,需要在第一次使用类之前,从外部源中初始化这些静态字段和属性
    2.静态构造函数什么时候执行
    CLR不能确定静态构造函数什么时候执行,也不能预计不同类的静态构造函数按什么顺序执行,但可以明确的是,静态构造函数之多执行一次,即在引用类之前执行在C#中,静态构造函数通常在第一次调用类的成员之前执行
    3.静态构造函数有访问修饰符吗?
    没有。因为,C#代码从不调用它,但在加载类时,总是由,CLR调用它。对于C#来说是私有的吧
    4.静态构造函数可以有参数吗?
    不能有参数。
    5.一个类可以有多个静态构造函数吗?
    一个类只能有一个静态构造函数
    6.静态构造函数可以访问实例成员吗?
    显然不能。只能访问静态成员
    7.一个类可以同时拥有午餐的静态构造函数和实例构造函数吗?
    可以。因为,静态构造函数是在加载类时执行的,而实例构造函数是在创建实例时执行的,所以两者不会有冲突

三:示例
    class A
    {
        public static int X;
        static A()             //④   执行完后返回到③ 
        {
            X = B.Y + 1;
            Console.WriteLine("static   A()");
        }
    }

    class B
    {
        public static int Y = A.X + 1;       //③   调用了A的静态成员, 
        //     转到A的静态构造函数----> 
        static B()             //②   如果带有初始值设定项的静态字段, 
        //     执行该类的静态构造函数时, 
        //     先要按照文本顺序执行那些初始值设定项。 
        //     转到初始值设定项----> 
        {
            Console.WriteLine("static   B()");
        }
        static void Main()           //①   程序入口, 
        //     如果类中包含用来开始执行的   Main   方法, 
        //     该类的静态构造函数将在调用   Main   方法之前执行。 
        //     转到B的静态构造函数----> 
        {
            Console.WriteLine("X   =   {0},   Y   =   {1}", A.X, B.Y);//⑤   输出结果 
            Console.ReadLine();
        }
    }
    执行结果:X=1;Y=2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值