C# static 静态的

示例

该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才能通过垃圾回收器运行。

  • 静态类无法实现接口。