说说C#的静态构造函数
2007-09-04 16:07
225 查看
首先需要明确一个想法:
静态成员属于类,而不属于实例;(需要用类名来调用)
非静态成员属于实例,而不属于类;(需要用实例名来调用)
静态函数中不能包含非静态成员;
非静态函数中可以包含静态成员;
OK Let's go!
对于普通构造函数,我们在用new建立该类实例时调用它(重载构造函数是不错的想法)
那么什么时候用到静态构造函数呢?
当你要初始化类中的静态变量时就要选择它了!(需要创建多个实例的情况尤为重要)
如果没有写静态构造函数,而类中包含带有初始值设定的静态成员,那么编译器会自动生成默认的静态构造函数。
那么你怎么调用自己编写的静态构造函数呢?
答案是你不能!
因为它在创建第一个实例或第一次引用任何静态成员之前,由.Net自动调用了(无须你动手啦),并且只执行一次。当你创建第二个实例或第二次引用任何静态成员时.Net就不会再调用该静态构造函数了
class SimpleClass
{
static SimpleClass()
{}
public SimpleClass()
{}
public SimpleClass(string formatStr)
{}
}
在使用静态构造函数的时候有几点需要注意:
1、静态构造函数既没有访问修饰符,也没有参数。因为是.Net调用的,所以像public和private等修饰符没有意义,并且你怎么给.Net调用的函数传参呢?
2、一个类只能有一个静态构造函数,并且不能被继承。
3、无参数的普通构造函数可以与静态构造函数共存。尽管参数列表相同,但一个属于类,一个属于实例,所以不会冲突。
就想到这么多
所以先写这么多
以后想到再补充吧
静态成员属于类,而不属于实例;(需要用类名来调用)
非静态成员属于实例,而不属于类;(需要用实例名来调用)
静态函数中不能包含非静态成员;
非静态函数中可以包含静态成员;
OK Let's go!
对于普通构造函数,我们在用new建立该类实例时调用它(重载构造函数是不错的想法)
那么什么时候用到静态构造函数呢?
当你要初始化类中的静态变量时就要选择它了!(需要创建多个实例的情况尤为重要)
如果没有写静态构造函数,而类中包含带有初始值设定的静态成员,那么编译器会自动生成默认的静态构造函数。
那么你怎么调用自己编写的静态构造函数呢?
答案是你不能!
因为它在创建第一个实例或第一次引用任何静态成员之前,由.Net自动调用了(无须你动手啦),并且只执行一次。当你创建第二个实例或第二次引用任何静态成员时.Net就不会再调用该静态构造函数了
class SimpleClass
{
static SimpleClass()
{}
public SimpleClass()
{}
public SimpleClass(string formatStr)
{}
}
在使用静态构造函数的时候有几点需要注意:
1、静态构造函数既没有访问修饰符,也没有参数。因为是.Net调用的,所以像public和private等修饰符没有意义,并且你怎么给.Net调用的函数传参呢?
2、一个类只能有一个静态构造函数,并且不能被继承。
3、无参数的普通构造函数可以与静态构造函数共存。尽管参数列表相同,但一个属于类,一个属于实例,所以不会冲突。
就想到这么多
所以先写这么多
以后想到再补充吧
相关文章推荐
- c# 学习笔记 静态构造函数
- CLR Via C# 学习笔记(5) 静态构造函数的性能
- C#中静态构造函数的几点注意
- C#中静态构造函数的学习
- C# 静态构造函数
- C#中静态构造函数含义及使用
- C# - 静态类和静态构造函数
- C# 编程指南静态构造函数(C# 编程指南)
- c# 静态构造函数与构造函数的调用先后
- C#箴言:用静态构造函数初始化静态成员
- “茴”字的几种写法——C#中静态构造函数和静态变量文字执行顺序问题
- C#里静态构造函数
- C#的静态构造函数(主要说的是编译器为Lambda表达式生成的类)
- [C#]BeforeFieldInit 与类静态构造函数
- C#中静态构造函数的学习
- 【C#基础知识】静态构造函数,来源于一道面试题的理解
- C#的静态构造函数
- C#的静态构造函数
- 解析C#中的私有构造函数和静态构造函数
- CLR Via C# 学习笔记(5) 静态构造函数的性能