【转载】关于C#静态构造函数的几点说明
一、定义
静态构造函数是C#的一个新特性,其实好像很少用到。不过当我们想初始化一些静态变量的时候就需要用到它了。这个构造函数是属于类的,而不是属于哪里实例的,就是说这个构造函数只会被执行一次。也就是在创建第一个实例或引用任何静态成员之前,由.NET自动调用。
class SimpleClass
{
// Static constructor
static SimpleClass()
{
//
}
}
在使用静态构造函数的时候应该注意几点:
1、静态构造函数既没有访问修饰符,也没有参数。因为是.NET调用的,所以像public和private等修饰符就没有意义了。
2、是在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类,也就是说我们无法直接调用静态构造函数,也就无法控制什么时候执行静态构造函数了。
3、一个类只能有一个静态构造函数。
4、无参数的构造函数可以与静态构造函数共存。尽管参数列表相同,但一个属于类,一个属于实例,所以不会冲突。
5、最多只运行一次。
6、静态构造函数不可以被继承。
7、如果没有写静态构造函数,而类中包含带有初始值设定的静态成员,那么编译器会自动生成默认的静态构造函数。
8、线程安全
关于线程安全需要特别说明一下,由于程序可能在多线程环境下运行,也就是可能出现同时多个线程准备执行静态构造函数的情况。CLR确保这个过程是安全的,实际上调用静态构造函数的线程需要先获得一个互斥线程同步锁,如果有多个线程试图执行类型的静态构造函数,只有一个线程能获得该锁;获得锁的线程完成初始类型初始化操作,其它线程只能等待;当初始化完成,等待的线程被唤醒,然后发现静态构造函数已经被执行过,就不会再执行。
二、作用
用于初始化静态成员。有时候我们会从配置文件读取一些值作为静态变量,类似这样:
public class StaticTester
{
private static readonly string key = ConfigurationManager.AppSettings["key"];
private static readonly string value = ConfigurationManager.AppSettings["value"];
static StaticTester()
{
}
}
如果要读取的配置信息比较多,而且要加入一些逻辑判断,那么可以这样:
public class StaticTester
{
private static readonly string key;
private static readonly string value; static StaticTester()
{
key = ConfigurationManager.AppSettings["key"];
if (string.IsNullOrEmpty(key))
{
throw new Exception("key变量未被正确配置!");
}
value = ConfigurationManager.AppSettings["value"];
if (string.IsNullOrEmpty(value))
{
throw new Exception("value变量未被正确配置!");
}
}
}
三、执行顺序
1. 运行时,优先对静态变量进行初始化。
2. 如果有静态构造函数,那么在创建第一个实例对象或者引用任何静态变量之前,调用静态构造函数。
3. 其它操作。
【转自】https://www.cnblogs.com/4littleProgrammer/p/4883012.html
https://www.cnblogs.com/michaelxu/archive/2007/03/29/693401.html
【转载】关于C#静态构造函数的几点说明的更多相关文章
- c#静态构造函数 与 构造函数 你是否还记得?(转载)
构造函数这个概念,在我们刚开始学习编程语言的时候,就被老师一遍一遍的教着.亲,现在你还记得静态构造函数的适用场景吗?如果没有,那么我们一起来复习一下吧.静态构造函数是在构造函数方法前面添加了stati ...
- c#静态构造函数 与 构造函数 你是否还记得?
构造函数这个概念,在我们刚开始学习编程语言的时候,就被老师一遍一遍的教着.亲,现在你还记得静态构造函数的适用场景吗?如果没有,那么我们一起来复习一下吧. 静态构造函数是在构造函数方法前面添加了stat ...
- 深入了解C#中的静态变量和静态构造函数
深入的剖析C#中静态变量和静态构造函数: 在日常的程序开发过程经常会使用到静态变量,众所周知,静态变量时常驻内存的变量,它的生命周期是从初始化开始一直到Application结束.但是,我们经常会忽略 ...
- 关于c#静态构造函数
http://baike.baidu.com/view/2634573.htm?fr=aladdin 在百科上看到C#的新特性静态构造函数,其中提到静态构造函数“不能继承” 今天做了个试验,发现实际上 ...
- c#静态构造函数
作用是初始化一些类的静态成员 1.在实例化类的对象,或者引用任何的静态成员之前,.Net自动调用此构造函数,而且只调用一次 2.没有任何修饰符,也没有参数 3.一个类只能有一个静态构造函数 4.无参的 ...
- java 静态构造函数
在java中貌似是没有静态构造函数的. 不过用下面的方式同样可以实现效果. static { }//end 这是静态代码块
- .NET基础:C#静态构造函数、静态方法、静态属性
用一个题目带大家走进静态函数,先看题目 class Program { public static int Count = 0; static Program() ...
- (转)C#静态构造函数
静态构造函数是C#的一个新特性,在编程过程中用处并不广,它的主要目的是用于初始化一些静态的变量. 因为这个构造函数是属于类的,而不属于任何一个实例,所以这个构造函数只会被执行一次,而且是在创建此类的第 ...
- C#中静态构造函数含义及使用
static以前都接触过,可是最近才发现了还有静态类的写法,也可能是以前没太注意了,所以自己去研究了一下! 1.什么是构造函数: 1.1 例如:static Class{} 1.2 使用静态函数的注 ...
随机推荐
- 00036_private
1.私有private 描述人.Person: 属性:年龄: 行为:说话:说出自己的年龄. class Person { int age; String name; public void show( ...
- static对局部变量的作用
static修饰局部变量: 1,延长局部变量的生命周期到程序技术时,局部变量才会被销毁 2,并没有改变局部变量的作用域 static修饰局部变量的使用场合: 1,如果某个函数的调用频率特别高 2,这个 ...
- log4net.dll配置以及在项目中应用
1,首先在项目中引用log4net.dll,然后项目中添加一个配置文件log4net.config <?xml version="1.0" encoding="ut ...
- Linux cp复制
复制指定目录下的全部文件到另一个目录中文件及目录的复制是经常要用到的.linux下进行复制的命令为cp.假设复制源目录 为 dir1 ,目标目录为dir2.怎样才能将dir1下所有文件复制到dir2下 ...
- hdu 4764 巴什博弈
Stone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- 03-offsetParent属性
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 源码分析 脱壳神器ZjDroid工作原理
0. 神器ZjDroid Xposed框架的另外一个功能就是实现应用的简单脱壳,其实说是Xposed的作用其实也不是,主要是模块编写的好就可以了,主要是利用Xposed的牛逼Hook技术实现的,下面就 ...
- robotframework使用
下面是ui自动化的使用,关于接口自动化的使用参照此博客:http://blog.csdn.net/wuxiaobingandbob/article/details/50747125 1.使用pytho ...
- Codeforces Round #267 (Div. 2) C. George and Job (dp)
wa哭了,,t哭了,,还是看了题解... 8170436 2014-10-11 06:41:51 njczy2010 C - George and Jo ...
- Python入门--2--继续学习
继续学习小甲鱼 一.python比较操作符 == :判断左边是否等于右边 != : 判断左边是否不能右边 二. if while判断语句 栗子: temp = input ("sha shu ...