关于C#中的静态构造函数和静态成员
本来感觉自己明白了C#中静态方法和静态成员的调用顺序。一直以为是使用类之前会调用静态构造函数,然后初始化静态成员。但今天在CSDN上看到了一段矛盾的描述,糊涂了。请哪位高...
本来感觉自己明白了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、在一个程序执行过程中,静态构造函数值执行一次
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();
}
}打印结果为
静态
动态
动态(说明了第一点和第四点)
静态构造器最主要作用就是对类的静态成员进行初始化
2011-08-25
展开全部
意思很简单,就是静态成员不需要实例化,可以通过类名加构造去调用他
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
静态构造函数可以给静态字段赋值
类的静态构造函数在给定应用程序域中至多执行一次:
只有创建类的实例或者引用类的任何静态成员才激发静态构造函数
静态构造函数是不可继承的,而且不能被直接调用
也就是说创建类的实例时不能用静态构造函数,它是自动执行的
类的静态构造函数在给定应用程序域中至多执行一次:
只有创建类的实例或者引用类的任何静态成员才激发静态构造函数
静态构造函数是不可继承的,而且不能被直接调用
也就是说创建类的实例时不能用静态构造函数,它是自动执行的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在给静态字段赋值时候静态构造函数起作用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
其实静态构造函数的作用就是初始化。。而静态成员的话,需要用类才可进行访问。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询