静态类
静态类与非静态类基本相同,但存在一个区别:静态类不能实例化。也就是说,不能使用 new 关键字创建静态类类型的变量。因为没有实例变量,所以要使用类名本身访问静态类的成员。例如,如果名为 UtilityClass 的静态类有一个名为 MethodA 的公共方法,则按下面的示例所示调用该方法:
UtilityClass.MethodA();
对于只对输入参数进行运算而不获取或设置任何内部实例字段的方法集,静态类可以方便地用作这些方法集的容器。例如,在 .NET Framework 类库中,静态类 System.Math 包含的方法只执行数学运算,而无需存储或检索特定 Math 类实例特有的数据。就是说,通过指定类名称和方法名称来应用类成员,如下示例所述。
double dub = -3.14;
Console.WriteLine(Math.Abs(dub));
Console.WriteLine(Math.Floor(dub));
Console.WriteLine(Math.Round(Math.Abs(dub)));
输出:
3.14
-4
3
和所有类类型一样,当加载引用静态类的程序时,.NET Framework 公共语言运行时 (CLR) 将加载该静态类的类型信息。程序不能指定加载静态类的确切时间。但是,可以保证在程序中首次引用该类前加载该类,并初始化该类的字段并调用其静态构造函数。静态构造函数仅调用一次,在程序驻留的应用程序域的生存期内,静态类一直保留在内存中。
静态类的主要特性:
- 仅包含静态成员。
- 无法实例化。
- 是密封的。
-
不能包含实例构造函数。
因此,创建静态类与创建仅包含静态成员和私有构造函数的类基本相同。私有构造函数阻止类被实例化。使用静态类的优点在于,编译器能够执行检查以确保不致偶然地添加实例成员。编译器将保证不会创建此类的实例。
静态类是密封的,因此不可被继承。它们不能从除 Object 外的任何类中继承。静态类不能包含实例构造函数,但可以包含静态构造函数。如果非静态类包含需要进行重要的初始化的静态成员,也应定义静态构造函数。










