C#的静态构造函数.cctor
2024-08-29 11:54:26
静态构造函数操作的是类(而非其实例的)成员。
静态构造函数(.cctor)的一些特点:
1. 声明和定义形式上,只能有static一个修饰符,不能有任何修饰符和返回值(也不能有void)。
2. 不能被显示调用,由CLR调用。
3. 最多只能调用一次。
4. 静态构造函数中只能调用静态字段和静态属性,方法等,不能操作实例字段,属性,方法等。
5. 静态构造函数需要时必须显示定义,只能最多一个。
6. 如果静态字段有直接赋值语句,并且定义了静态构造函数,则生成的IL中,会先执行该赋值语句,然后执行静态构造函数的中的代码。
7. 不同于实例构造函数,静态构造函数生成的代码中,不含有对基类任何构造函数的调用。
8. 如果定义了静态构造函数,则静态构造函数的调用一定会在实例构造函数调用之前发生(由于对基类的实例构造函数的调用是在派生类的实例构造函数中,故而,如果基类有静态构造函数但基类尚未被加载,则基类的静态构造函数的调用依然晚于派生类的静态构造函数。基类的静态构造函数调用发生在派生类的构造函数生成的IL中,内联初始化实例字段后,基类实例构造函数调用之前)。
9. 没有显示声明静态构造函数时,即使有静态字段,生成的IL中也不一定有静态构造函数.cctor,但CLR会在运行时执行一个系统生成的.cctor。调用的时机是程序集加载到类第一次被实例化(或类静态成员第一次被调用)之前,但时机由CLR决定,无法准确判断。
10. 若显示声明了静态构造函数,则静态构造函数的调用实际是在类静态第一次被访问或者类第一次被实例化(即类加载时),只会被调用这一次。
11. 可以看出,静态构造函数的调用发生在类加载时,且在实例构造函数调用之前。
最新文章
- MySQL 显示版本、端口、状态
- asp.net mvc 多级目录结构
- oc弹出框显示提示消息
- Cent OS 6 主机名设置
- wordpress 为文章内容添加自动过滤,例如为出站链接添加nofollow,也可以将淘宝客链接转换。。
- push与concat
- Filezilla 多目录的访问设置
- Codeforces Round #226 (Div. 2)A. Bear and Raspberry
- Hibernate命名空间怎样实现?
- iOS_SN_CoreData数据迁移
- document.all 用法
- 2017 .NET 開發者須知
- 一个备份mysql 数据库的脚本
- spring ioc(反转控制)
- Codeforces 653F Paper task SA
- docker 常见错误总结
- java集合框架(1) hashMap 简单使用以及深度分析(转)
- WinForm 中 comboBox控件数据绑定
- learning ddr DLL-off mode
- November 06th, 2017 Week 45th Monday
热门文章
- 2015-03-18——mongodb的简单配置
- 阿里巴巴 JAVA 开发手册
- C/C++运算符及其优先级
- 利用VMware克隆 windows 虚拟机需要注意的事项
- node.js---sails项目开发(5)---用户表的建立
- django 中模板语言的各种用法
- python16_day08【异常、多线程】
- CNN学习笔记:卷积神经网络
- HDU - 6430 Problem E. TeaTree 2018 Multi-University Training Contest 10 (LCA+枚举因子)
- datagrid 用法