该static修饰符用于声明静态成员,它不需要为被实例进行访问,而是通过它的名称,即简单地访问DateTime.Now。
static 可以与类,字段,方法,属性,运算符,事件和构造函数一起使用。
虽然一个类的实例包含该类所有实例字段的单独副本,但是每个静态字段只有一个副本。
class A
{
static public int count = 0;
public A()
{
count++;
}
}
class Program
{
static void Main(string[] args)
{
A a = new A();
A b = new A();
A c = new A();
Console.WriteLine(A.count); // 3
}
}
count等于A类的实例总数。
static修饰符还可以用于为类声明静态构造函数,初始化静态数据或运行仅需要调用一次的代码。在首次引用该类之前,将调用静态构造函数。
class A
{
static public DateTime InitializationTime;
// 静态构造函数
static A()
{
InitializationTime = DateTime.Now;
// 保证只运行一次
Console.WriteLine(InitializationTime.ToString());
}
}
Astatic class用static关键字标记,可以用作处理参数的一组方法的有益容器,但不一定需要绑定到实例。由于static该类的性质,无法实例化它,但是可以包含一个static constructor。的一些功能static class包括:
不能继承
除了不能继承任何东西 Object
可以包含静态构造函数,但不能包含实例构造函数
只能包含静态成员
被密封
编译器也很友好,它将使开发人员知道类中是否存在任何实例成员。一个示例是在美国和加拿大指标之间转换的静态类:
static class ConversionHelper {
private static double oneGallonPerLitreRate = 0.264172;
public static double litreToGallonConversion(int litres) {
return litres * oneGallonPerLitreRate;
}
}
当类声明为静态时:
public static class Functions
{
public static int Double(int value)
{
return value + value;
}
}
类中的所有函数,属性或成员也需要声明为静态。无法创建该类的实例。本质上,静态类使您可以创建逻辑上分组在一起的功能包。
由于C#6static也可以与using导入静态成员和方法一起使用。然后可以使用它们而无需类名。
没有的旧方法using static:
using System;
public class ConsoleApplication
{
public static void Main()
{
Console.WriteLine("你好,世界!"); //Writeline是属于静态类Console的方法
}
}
例子 using static
using static System.Console;
public class ConsoleApplication
{
public static void Main()
{
WriteLine("你好,世界!"); //Writeline是属于静态类Console的方法
}
}
尽管静态类可能非常有用,但它们确实带有一些警告:
一旦调用了静态类,该类将被加载到内存中,直到卸载包含该静态类的AppDomain才能通过垃圾回收器运行。
静态类无法实现接口。