c#中关于静态构造函数的

class A
{
static A()
{
Console.WriteLine("Init A");
}
public static void F()
{
Console.WriteLine("F.A");
}
}
class B
{
static B()
{
Console.WriteLine("Init B");
}
public static void F()
{
Console.WriteLine("F.B");
}
}
class Test
{
static void Main()
{
A.F();
B.F();
}
}

为什么输出是:
Init A
F.A
Init B
F.B

因为我们无法直接调用静态构造函数,也不可能知道静态构造函数何时会被调用,所以在静态构造函数中的代码就不知道何时执行了, 至于
A.F();
B.F();
则是静态方法,何时调用何时执行。

以下是详细说明

静态构造函数是C#的一个新特性,在编程过程中用处并不广,它的主要目的是用于初始化一些静态的变量。

因为这个构造函数是属于类的,而不属于任何一个实例,所以这个构造函数只会被执行一次,而且是在创建此类的第一个实例或引用任何静态成员之前,由.NET自动调用。

在程序中我们可以这样写:
class SimpleClass
{ static public Object object;
// Static constructor
static SimpleClass()
{
// Initialize static parameter
somthing
}
}
也可以这样写,这和上面的做法其实没有区别:
class SimpleClass
{
static public Object object = new Object();
}
在使用静态构造函数的时候应该注意几点:
1、静态构造函数既没有访问修饰符,也没有参数。 --因为是.NET调用的,所以像public和private等修饰符就没有意义了。

2、在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类。 --也就是说我们无法直接调用静态构造函数,也不可能知道静态构造函数何时会被调用。

3、一个类只能有一个静态构造函数。
4、无参数的构造函数可以与静态构造函数共存。 --尽管参数列表相同,但一个属于类,一个属于实例,所以不会冲突。
5、最多只运行一次。
6、静态构造函数不可以被继承。
7、如果没有写静态构造函数,而类中包含带有初始值设定的静态成员,那么编译器会自动生成默认的静态构造函数。

参考资料:百度百科

温馨提示:内容为网友见解,仅供参考
第1个回答  2010-10-06
用静态方法的时候,类都会自动先运行一下自己的构造函数的,只有构造函数把类实例化了。
你的才可以调用的,所以,先运行的是构造函数里的代码咯~·
第2个回答  2010-10-06
A.F();
其实是 static A()+A.F() 因为本身调用类的时候 自动调用和类名一样的方法 也就是它本身本回答被提问者采纳

C#的静态构造函数有些什么特点?
静态构造函数具有以下特点: 1、静态构造函数既没有访问修饰符,也没有参数。 2、在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。 3、无法直接调用静态构造函数。 4、在程序中,用户无法控制何时执行静态构造函数。 5、静态构造函数的典型用途是:当类使用日志文件时,将使...

C#的静态构造函数有些什么特点?
1、静态构造函数既没有访问修饰符,也没有参数。因为是.NET调用的,所以像public和private等修饰符就没有意义了。2、是在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类,也就是说我们无法直接调用静态构造函数,也就无法控制什么时候执行静态构造函数了。3、一个类只能...

C#中,静态的构造函数跟非静态的有什么区别?
静态构造函数是最早被调用的,只要有静态访问,那么就先调用静态构造函数。其他非静态构造函数会在调用完毕静态的成员之后才被调用。所以一般静态构造函数用来为静态成员初始化,或者作为单件模式中创建对象的唯一入口。例如:private static GoodsManager s_Instance;public static GoodsManager Instance { get{r...

关于C#中的静态构造函数和静态成员
1、在一个程序执行过程中,静态构造函数值执行一次 2、静态构造器在类的静态成员初始化之后执行。或者讲编译器会将静态成员初始化语句转换成赋值语句放在静态构造器执行的最开始。如:下面那个类里面 class A { public static int i=100;} 这个类为了给这个静态成员初始化,会自动创建一个静态构造器,...

c#只读字段和常量的区别,以及静态构造函数
只读字段:用readonly修饰符声明的字段为只读字段,只读字段可以是实例字段或静态字段,它只能在字段声明中或构造函数中重新赋值,在其它任何地方都不能改变只读字段的值。常量:用const修饰符声明的字段为常量,常量只能在声明中初始化,以后不能再修改。静态构造函数:一个类只能有一个静态构造函数,静态...

静态构造函数只能对什么数据成员进行初始化
静态数据。静态C#构造函数只能对静态数据成员进行初始化,而不能对非静态数据成员进行初始化。但是,非静态C#构造函数既可以对静态数据成员赋值,也可以对非静态数据成员进行初始化。

关于C#静态函数什么时候被调用的问题
静态构造函数一般是第一次访问一个累的时候由CLR自动调用的。当然你也可以使用RumtimeHelper类的静态方法强制调用一个类的静态构造函数

C#中,静态类和非静态类的区别是什么?
C#中,静态类和非静态类的区别是什么? 静态类是不能实例化的,我们直接使用它的属性与方法,静态类最大的特点就是共享。 静态类中的所有成员必须是静态的。 静态类可以有静态构造函数,静态构造函数不可继承。 静态构造函数可以用于静态类,也可用于非静态类。 静态构造函数无访问修饰符、无参数,...

c#中静态构造函数和实例构造函数有什么区别
静态构造函数是系统调用,不用人为调用,你在使用静态属性的时候,系统会先构造一个实例,然后去调用属性,把属性值返回给用户 实例构造函 就必须用户去调用,手动构造对象,

C#构造函数只有在对象实例化时才会执行吗?
1、构造函数的功能是对类成员进行初始化。2、类的静态成员需要用静态构造函数初始化。类的非静态成员需要用非静态构造函数初始化。3、静态构造函数只执行一次,时间是当类被装入内存的时候。非静态构造函数执行的次数不定,你new一个变量就执行一次,new十个变量就执行十次。

相似回答