上一篇补习了类和方法,这一篇补习下类中一些静态成员和常量。
以下是本文所要介绍的内容:
1、静态构造函数
2、静态成员与常量
一、静态构造函数
前段时间经常看到园子里有朋友发面试题,其中比较有代表性的就是静态构造函数了,有兴趣的朋友可以搜索下看看,我这边也就顺便补习下静态构造函数的知识:
1、静态构造函数永远优先与其他构造函数。
2、静态构造函数是在首次访问所在类的第一个成员时进行的,并且只会执行一次。
3、静态构造函数没有参数,不需要任何访问修饰符,有.NET runtime运行。
4、类中一旦包含静态构造函数,那么编译器会自动插入一段检查代码负责检查所有静态成员和构造,以确保其优先运行。
所以在了解了以上知识后再看下面的代码就会清楚很多:
class Class1
{
public static string str = "fsdafdsa";
public static readonly Class1 anobject = new Class1();
static Class1()
{
System.Console.WriteLine("静态构造函数调用");
}
private Class1()
{
}
public static Class1 c()
{
return new Class1();
}
}
static void Main(string[] args)
{
string s = Class1.str;
Class1 temp =Class1.c();
Console.WriteLine("程序开始");
Console.ReadLine();
}
结果输出时,字符串“静态构造函数调用”会第一个被输出,这是因为string s = Class1.str; 这句代码已经访问了类中的成员了,符合上面的第2条。
二、静态成员与常量
对于类来说,一个类中可以包含许多成员,而且大部分成员都可以是静态的,比如:变量、属性、方法等。同样需要注意的有以下几点:
1、如果不包含静态构造函数,那么静态字段会在访问类的任何静态字段时候进行初始化及赋值。
2、除非需要访问一个静态字段,否则不必对静态成员进行初始化。
3、对于静态类,在IL的最终标记为abstract和sealed。
在为字段设定是否为常量(const)或只读(readonly)时,需要注意:
1、const常量会在编译时就固定,所以常量建议是不会更改的变量,否则如果一旦发生更改且没有重新编译那么程序访问的还是老的值,所以对于可能会更改的值还是设置为readonly。
2、当将变量数组设置为readonly的时候,其数组的长度是无法更改的,但是其中的值是可以更改的。
3、应用了readonly的变量可以在构造函数中对其进行更改。