关于C#中的静态构造函数和静态成员

本来感觉自己明白了C#中静态方法和静态成员的调用顺序。一直以为是使用类之前会调用静态构造函数,然后初始化静态成员。但今天在CSDN上看到了一段矛盾的描述,糊涂了。请哪位高手详细解释下。下面是CSDN上的描述: 静态成员在第一次被访问之前并且在调用静态构造函数(如有存在)之前进行初始化。若要访问静态类成员,应使用类名而不是变量名来指定该成员的位置,如下面的示例所示: C#     Automobile.Drive(); int i = Automobile.NumberOfWheels; 如果类包含静态字段,请提供在加载类时初始化这些字段的静态构造函数。  “静态成员在第一次被访问之前并且在调用静态构造函数(如有存在)之前进行初始化”   “如果类包含静态字段,请提供在加载类时初始化这些字段的静态构造函数”这两句不是自相矛盾么?

首先说一下理论:静态构造函数是实现一个类进行初始化方法成员。它一般对于静态函数初始化。静态构造函数不能有参数(意味着不能被重载),不能有修饰符(静态构造器永远是私有的所以不能有修饰符)不能被调用,当类被加载时类的静态构造函数被自动调用。用static关键字声明
静态构造函数的运行准则:
1、在一个程序执行过程中,静态构造函数值执行一次
2、静态构造器在类的静态成员初始化之后执行。或者讲编译器会将静态成员初始化语句转换成赋值语句放在静态构造器执行的最开始。如:下面那个类里面
class A
{
public static int i=100;
}
这个类为了给这个静态成员初始化,会自动创建一个静态构造器,如果不给i赋值,就不会自动创建那个静态构造器

3、静态构造器在任何类的静态成员被应用之前执行
class A
{
public static int i=100;
static A()
{
Console.WriteLine("静态");
}
public A()
{
Console.WriteLine("动态");
}
}
class Program
{

static void Main(string[] args)
{
Console.WriteLine(A.i);
Console.ReadLine();
}
}的打印结果为
静态
100()说明了第三点
4、静态构造器在任何类的实例变量被分配前执行

class A
{
public static int i=100;
static A()
{
Console.WriteLine("静态");
}
public A()
{
Console.WriteLine("动态");
}
}
class Program
{

static void Main(string[] args)
{
A a = new A();
A a1 = new A();
Console.ReadLine();
}
}打印结果为
静态
动态
动态(说明了第一点和第四点)

静态构造器最主要作用就是对类的静态成员进行初始化
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-08-25
意思很简单,就是静态成员不需要实例化,可以通过类名加构造去调用他
第2个回答  2011-08-25
静态构造函数可以给静态字段赋值

类的静态构造函数在给定应用程序域中至多执行一次:
只有创建类的实例或者引用类的任何静态成员才激发静态构造函数

静态构造函数是不可继承的,而且不能被直接调用

也就是说创建类的实例时不能用静态构造函数,它是自动执行的
第3个回答  2011-08-25
在给静态字段赋值时候静态构造函数起作用
第4个回答  2011-08-25
做任务 路过
第5个回答  2011-08-31
其实静态构造函数的作用就是初始化。。而静态成员的话,需要用类才可进行访问。。

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

C#中静态方法是什么意思?静态成员呢?还有静态类?
静态成员属于类,所以要用“类名.静态字段”的样式 int i=200;sqrt.Total=i;c#中当然还有其他静态成员,例如静态方法!!!在此强调一点,静态方法只能直接访问静态类!静态类:它任然具有对象的抽象性,类可以声明为 static 的,以指示它仅包含静态成员。不能使用 new 关键字创建静态类的实例。静态类...

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

c#中几种函数的区别
1.公共静态函数,是类方法而不是实例方法,其它类可以访问该函数,访问该函数不需要实例化对象.2.对象实例的公共方法,其它对象可以访问此方法.3.私有静态方法,仅类内部使用,外部不访问.Public 公共成员 Private 私有成员 没有注明关键字.net预设为私有成员 有返回值的成员习惯称为函数。无返回值的成员习...

C#中如何调用静态类中的构造函数
•在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类,也就是说我们无法直接调用静态构造函数,也就无法控制什么时候执行静态构造函数了。•如果类中包含用来开始执行的 Main 方法,则该类的静态构造函数将在调用 Main 方法之前执行。•如果类中的静态...

C#中,静态类和非静态类的区别是什么?
静态构造函数不可被直接调用,当创建类实例或引用任何静态成员之前,静态构造函数被自动执行,并且只执行一次。非静态类需要你自己去实例化加载它,才能调用 c#静态类和非静态类的区别 静态类: static 关键字 调用 类名.方法 在静态方法中只能访问静态成员 在静态类中只能有静态成员 在非静态类...

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

c#的静态类是不是不能继承?
静态类 1 不能有实例构造函数,只能有静态构造函数,且不能对其构造函数使用访问修饰符。2 静态类是密封的不能被继承 3 静态类中只能包含静态成员

C#中静态类为什么定义函数必须加static
1:仅包含静态成员。2:无法实例化。3:静态类的本质,是一个抽象的密封类,所以不能被继承,也不能被实例化。4:不能包含实例构造函数。5:如果一个类下面的所有成员,都需要被共享,那么可以把这个类定义为静态类。换一句大白话,C# 2.0中引入了static修饰词就是为了控制代码中“静态类内部不允许...

C# 中类的成员有哪些?
1、类简介:类(class)是C#类型中最基础的类型。类是一个数据结构,将状态(字段)和行为(方法和其他函数成员)组合在一个单元中。类提供了用于动态创建类实例的定义,也就是对象(object)。类支持继承(inheritance)和多态(polymorphism),即派生类能够扩展和特殊化基类的机制。2、使用类声明可以...

相似回答
大家正在搜