1.简介:
使用 static
修饰符声明属于类型本身而不是属于特定对象的静态成员。
static
修饰符可用于类、字段、方法、属性、运算符、事件和构造函数,但不能用于索引器、析构函数或类以外的类型。
2. 示例:
如果一个类声明为 static,那么这个类只能包含 static 方法:
static class SomeClass
{
public static void DoSomething() { /*...*/ }
public static void DoSomethingElse() { /*...*/ }
}
不能通过实例引用静态成员。 然而,可以通过类型名称引用它。
尽管类的实例包含该类所有实例字段的单独副本,但每个静态字段只有一个副本。
不可以使用this
来引用静态方法或属性访问器。
如果对类应用static
关键字,则该类的所有成员都必须是静态的。
类和静态类可以有静态构造函数。 静态构造函数在程序开始和类实例化之间的某个时刻调用。
3. 静态构造方法
静态构造函数用于初始化任何静态
数据,或用于执行仅需执行一次的特定操作。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。
class SimpleClass
{
static SimpleClass()
{
Console.WriteLine("SimpleClass");
}
}
静态构造函数具有以下特点:
静态构造函数既没有访问修饰符,也没有参数。
在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。
无法直接调用静态构造函数。
在程序中,用户无法控制何时执行静态构造函数。
静态构造函数的典型用途是:当类使用日志文件时,将使用这种构造函数向日志文件中写入项。
静态构造函数在为非托管代码创建包装类时也很有用,此时该构造函数可以调用 LoadLibrary 方法
**示例 : **
在此示例中,类 Bus有一个静态构造函数和一个静态成员 Drive()。当调用 Drive()时,将调用静态构造函数来初始化类。
public class Bus
{
// Static constructor:
static Bus()
{
System.Console.WriteLine("The static constructor invoked.");
}
public static void Drive()
{
System.Console.WriteLine("The Drive method invoked.");
}
}
class TestBus
{
static void Main()
{
Bus.Drive();
}
}
输出 :
The static constructor invoked.
The Drive method invoked.
4. 总结:
静态类:
如果一个类,被声明为静态类,那么该类不可以被实例化,也不可以被继承,同时不可以包含非静态成员。
非静态类中,可以包含静态成员。
静态方法
- 静态方法中,不可以访问非静态成员。
- 非静态方法中,可以调用静态和非静态成员。
静态成员的生命周期是:从程序开始到程序结束