1、静态类
1)仅包含静态成员。
2)不能被实例化。
3)是密封的,不可被继承
1)仅包含静态成员。
2)不能被实例化。
3)是密封的,不可被继承
4)不能包含实例构造函数
5)调用前初始化(构造函数),只初始化一次
2、静态成员
1)如果创建了该类的任何实例,不能使用实例来访问静态成员。
2)静态方法和属性只能访问静态字段和静态事件。
3)静态成员通常用于表示不会随对象状态而变化的数据或计算。
4)静态方法可以被重载但不能被重写,因为它们属于类,不属于类的任何实例,静态成员只被创建一次,所以静态成员只有一份。类加载的时候,所有的静态成员就会被创建在“静态存储区”里面,一旦创建直到程序退出,才会被回收。
5)C# 不支持静态局部变量(在方法范围内声明的变量)。
6)静态字段有两个常见的用法:一是记录已实例化对象的个数,二是存储必须在所有实例之间共享的值。
7)一个类只能有一个静态构造函数,该构造函数不能有访问修饰符,不能带任何参数,不能被直接调用,只能在:
(a) 创建包含静态构造函数的类实例时
(b) 访问包含静态构造函数的静态成员时会先调用静态构造函数,无论创建了多少个类实例,其静态构造函数都只调用了一次。
class Program
{
public static int i =0;
public Program()
{
i = 1;
Console.Write("实例构造方法被调用");
}
static Program()
{
i = 2;
Console.Write("静态构造函数被执行");
}
static void Main(string[] args)
{
Console.Write(Program.i); //结果为2,首先,类被加载,所有的静态成员被创建在静态存储区,i=0,接着调用了类的成员,这时候静态构造函数就会被调用,
i=2;
Program p = new Program();
Console.Write(Program.i);//结果为1,实力化后,调用了实例构造函数,i=1,因为静态构造函数只执行一次,所以不会再执行。
}
}
8)this/base 关键字在静态方法中不能使用,因为有可能对象还不存在。
9)静态成员变量只被初始化一次,第二次保持着第一次改变后的值。