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

    静态构造函数是在构造函数方法前面添加了static关键字之后形成的,并且没有修饰符(public,private),没有参数。

    特点:
    1、静态构造函数没有修饰符修饰(public,private),因为静态构造函数不是我们程序员调用的,是由.net 框架在合适的时机调用的。
    2、静态构造函数没有参数,因为框架不可能知道我们需要在函数中添加什么参数,所以规定不能使用参数。
    3、静态构造函数前面必须是static 关键字。如果不加这个关键字,那就是普通的构造函数了。
    4、静态构造函数中不能实例化实例变量。(变量可以分为类级别和实例级别的变量,其中类级别的有static关键字修饰)。
    5、静态函数的调用时机,是在类被实例化或者静态成员被调用的时候进行调用,并且是由.net框架来调用静态构造函数来初始化静态成员变量。
    6、一个类中只能有一个静态构造函数。
    7、无参数的静态构造函数和无参数的构造函数是可以并存的。因为他们一个属于类级别,一个属于实例级别,并不冲突。
    8、静态构造函数只会被执行一次。并且是在特点5中的调用时机中进行调用。
    9、如果没有在类中写构造函数,那么框架会为我们生成一个构造函数,那么如果我们在类中定义了静态变量,但是又没有定义静态构造函数,那么框架也会帮助我们来生成一个静态构造函数来让框架自身来调用。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace ConsoleApp1
    {
    class A
    {
    static A()
    {
    Console.WriteLine("1");
    }
    public A()
    {
    Console.WriteLine("2");

    }
    }
    class B:A
    {
    static B()
    {
    Console.WriteLine("a");
    }
    public B()
    {
    Console.WriteLine("b");

    }
    }
    class Program
    {
    static void Main(string[] args)
    {
    //a 1 2 b
    A ab = new B();
    Console.WriteLine("--------");
    //2 b
    ab = new B();
    Console.ReadKey();
    }
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    执行结果:

    1、A ab = new B();

    A. 实例化B, 执行B的静态构造函数 == 输出`a`
    B. 执行B的构造函数,因为B继承自A,所以先进入A
    C. 实例化A, 执行A的静态构造函数,== 输出 `1`
    D. 执行A的构造函数 ==输出`2`
    E. 最后回到B的构造函数 == 输出`b`
    1
    2
    3
    4
    5
    2、ab = new B();

    因为静态构造函数只创建一次,所以不会进入静态构造函数
    A. 因为B继承自A,所以先进入A的构造函数 == 输出`2`
    B. 再进入B的构造函数 == 输出`b`
    ————————————————
    版权声明:本文为CSDN博主「hyunbar」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/hyunbar/article/details/81171335

  • 相关阅读:
    主机与虚拟机通信:以主机VS2010连接虚拟机MySql为例
    Json与类对象转换
    VS附加到进程调试的方法及应用场景
    地图API使用文档-以腾讯地图为例
    JS使用ActiveXObject读取数据库代码示例(只支持IE)
    css文件内引用外部资源文件的相对路径
    ::after,::before使用
    高德地图API应用
    LogNet4学习笔记
    MvcPager分页控件的使用
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/13320844.html
Copyright © 2011-2022 走看看