静态变量
首先,在c#中没有全局变量这个概念,所以想要使用某个成员变量的时候只有实现该类的实例才能操作这个成员变量的数据.但是有些时候需要多次使用变量,就会出现多次实例的糟糕现象。这个时候,静态变量就可以很好地实现我们所想要的。
静态变量的生命周期
静态变量时常驻内存的变量,它的生命周期是从初始化开始一直到Application结束。
静态变量的声明方式如下 [访问修饰符] static 数据类型 变量名;
这里的访问修饰符可以是public,protected,private或internal等。
静态变量如何使用
静态变量必须使用类名来引用,而不能使用类的实例,因为,静态变量不属于任何实例,而是共有的。
静态变量的执行时机是在第一次new这个类的实例的时候或者第一次引用这个类内的任何一个静态的成员的时候执行的
例子: 类名.静态变量
//声明
Class Test{
public static int y;
}
//调用
Class Main{
StaticVar.y = 20;
}
静态变量在声明时,如果没有给出初始值或使用前没有赋任何值的话,系统会给他们一个默认值。
对于整型数据默认值为0;单精度数据为:0.0f;双精度数据为0.0;布尔型数据为False;引用型数据为null。
静态函数
静态方法与静态变量一样,不属于任何特定的实例,属于类全体成员共有,由类名来调用
静态方法只能访问类的静态成员,不能访问类的非静态成员,因为静态成员属于类所有; 非静态方法可以访问类的静态成员,也可以访问类的非静态成员,静态方法只能访问类中的静态成员; 静态方法不能使用实例来调用,只能使用类名来调用。 静态方法在类实例化前就可以使用,而类中的非静态变量必须在实例化之后才能分配内存。
public class FTestClass
{
public static int Fstr=1;
static FTestClass()
{
Fstr= STestClass.Sstr+ 1;
}
}
public class STestClass
{
public static int Sstr;
static STestClass()
{
//构造函数
}
static void Main()
{
Console.WriteLine("Fstr={0}, Sstr={1}", FTestClass.Fstr, STestClass.Sstr);
Console.ReadLine();
}
}
以上这段代码,在FirstClass的静态构造函数执行之前_FirstVal为默认的值0,静态构造函数执行完成之后_FirstVal为1,程序运行输出的结果是:FirstVal=1,SecondVal=0。并且以上代码FirstClass的静态构造函数式在SecondClass的静态构造函数之前执行。
优缺点
静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁。
静态方法和静态变量创建后始终使用同一块内存,而使用实例的方式会创建多个内存。