该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才能通过垃圾回收器运行。
静态类无法实现接口。