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

C#的静态构造函数.cctor的更多相关文章

  1. 静态构造函数c# 静态块java initallize oc

    静态构造函数c# 静态块java initallize oc 先看一道常见题目,以下代码的执行结果是什么? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1 ...

  2. c#静态构造函数 与 构造函数 你是否还记得?

    构造函数这个概念,在我们刚开始学习编程语言的时候,就被老师一遍一遍的教着.亲,现在你还记得静态构造函数的适用场景吗?如果没有,那么我们一起来复习一下吧. 静态构造函数是在构造函数方法前面添加了stat ...

  3. 深入了解C#中的静态变量和静态构造函数

    深入的剖析C#中静态变量和静态构造函数: 在日常的程序开发过程经常会使用到静态变量,众所周知,静态变量时常驻内存的变量,它的生命周期是从初始化开始一直到Application结束.但是,我们经常会忽略 ...

  4. 关于c#静态构造函数

    http://baike.baidu.com/view/2634573.htm?fr=aladdin 在百科上看到C#的新特性静态构造函数,其中提到静态构造函数“不能继承” 今天做了个试验,发现实际上 ...

  5. c#静态构造函数

    作用是初始化一些类的静态成员 1.在实例化类的对象,或者引用任何的静态成员之前,.Net自动调用此构造函数,而且只调用一次 2.没有任何修饰符,也没有参数 3.一个类只能有一个静态构造函数 4.无参的 ...

  6. java 静态构造函数

    在java中貌似是没有静态构造函数的. 不过用下面的方式同样可以实现效果. static { }//end 这是静态代码块

  7. .NET基础:C#静态构造函数、静态方法、静态属性

    用一个题目带大家走进静态函数,先看题目 class Program    {        public static int Count = 0;        static Program()   ...

  8. (转)C#静态构造函数

    静态构造函数是C#的一个新特性,在编程过程中用处并不广,它的主要目的是用于初始化一些静态的变量. 因为这个构造函数是属于类的,而不属于任何一个实例,所以这个构造函数只会被执行一次,而且是在创建此类的第 ...

  9. C#中静态构造函数含义及使用

    static以前都接触过,可是最近才发现了还有静态类的写法,也可能是以前没太注意了,所以自己去研究了一下! 1.什么是构造函数: 1.1 例如:static  Class{} 1.2 使用静态函数的注 ...

随机推荐

  1. sql 锁类型与锁机制

    SQL Server锁类型(SQL)收藏1. HOLDLOCK: 在该表上保持共享锁,直到整个事务结束,而不是在语句执行完立即释放所添加的锁.   2. NOLOCK:不添加共享锁和排它锁,当这个选项 ...

  2. Lua(1)

    1.the use of functions in table fields is a key ingredient for some advanced uses of Lua, such as mo ...

  3. PHP逐字符读取数据

    <?php $file = fopen("Minot.txt", "r") or exit("Unable to open file!" ...

  4. Java泛型一:基本介绍和使用

    原文地址http://blog.csdn.net/lonelyroamer/article/details/7864531 现在开始深入学习java的泛型了,以前一直只是在集合中简单的使用泛型,根本就 ...

  5. 简单的menu和点击(包括alertDialog定制)

    import android.app.Activity;import android.app.AlertDialog;import android.app.Dialog;import android. ...

  6. ipv6被拒的解决方法

    A,检测服务器是否支持ipv6连接 用mac 搭建IPv6环境测试,只能测试客户端到mac这段网络正常,但是mac到服务器还是IPv4的,所以没有办法测试服务器的IPv6是否正常.可以用手机打开2)步 ...

  7. C++中的config设计

    配置文件读写类,它要有以下这些方法: 1. 支持读入一个指定配置文件的能力 2. 支持随时加入一个配置项的能力 3. 足够强大,能够写入各种数据结构的配置信息 C++ 里,我们要存储这样的数据就使用 ...

  8. ASP.NET WebAPI2 发布之后404 Not Found

    方法一:首先确保服务器安装.Net FrameWork 4.0 并且注册IIS 方法二:对应应用程序池版本为v4.0,模式为集成 方法三:在web.config中加入 <system.webSe ...

  9. Web开发相关笔记

    1.MySQL命令行下执行.sql脚本详解http://database.51cto.com/art/201107/277687.htm 在可视化工具里导出.sql脚本 --> 放命令行里运行 ...

  10. HGVS,非HGVS形式的突变描述解释

    NG_012232.1(NM_004006.1):c.93+1G>T: 在该转录本NM_004006.1外显子的第93个碱基的下1个碱基(属于内含子)G变为T. NG_012232.1(NM_0 ...