zoukankan      html  css  js  c++  java
  • C#的静态构造函数.cctor

    静态构造函数操作的是类(而非其实例的)成员。
    静态构造函数(.cctor)的一些特点:
    1. 声明和定义形式上,只能有static一个修饰符,不能有任何修饰符和返回值(也不能有void)。
    2. 不能被显示调用,由CLR调用。
    3. 最多只能调用一次。
    4. 静态构造函数中只能调用静态字段和静态属性,方法等,不能操作实例字段,属性,方法等。
    5. 静态构造函数需要时必须显示定义,只能最多一个。
    6. 如果静态字段有直接赋值语句,并且定义了静态构造函数,则生成的IL中,会先执行该赋值语句,然后执行静态构造函数的中的代码。
    7. 不同于实例构造函数,静态构造函数生成的代码中,不含有对基类任何构造函数的调用。
    8. 如果定义了静态构造函数,则静态构造函数的调用一定会在实例构造函数调用之前发生(由于对基类的实例构造函数的调用是在派生类的实例构造函数中,故而,如果基类有静态构造函数但基类尚未被加载,则基类的静态构造函数的调用依然晚于派生类的静态构造函数。基类的静态构造函数调用发生在派生类的构造函数生成的IL中,内联初始化实例字段后,基类实例构造函数调用之前)。
    9. 没有显示声明静态构造函数时,即使有静态字段,生成的IL中也不一定有静态构造函数.cctor,但CLR会在运行时执行一个系统生成的.cctor。调用的时机是程序集加载到类第一次被实例化(或类静态成员第一次被调用)之前,但时机由CLR决定,无法准确判断。
    10. 若显示声明了静态构造函数,则静态构造函数的调用实际是在类静态第一次被访问或者类第一次被实例化(即类加载时),只会被调用这一次。
    11. 可以看出,静态构造函数的调用发生在类加载时,且在实例构造函数调用之前。

  • 相关阅读:
    ubuntu16.04使用anaconda创建python虚拟环境
    Ubuntu16.04里安装anaconda3后将python第三方包安装到指定目录下
    conda把包安装到当前激活的环境中
    ubuntu修改环境变量
    conda安装tensorflow
    ASP VNext 开源服务容错处理库Polly
    EntityFramework实现指定字段的通用赋值
    NET流行高性能JSON框架-Json.NET
    .NET网站国际化策略
    软件开发工作流-GitFlow
  • 原文地址:https://www.cnblogs.com/myseasky/p/6709920.html
Copyright © 2011-2022 走看看