通常将不进行实例化且仅包含静态成员的类声明为具有私有构造函数的密封类。.Net类库中System.Console和System.Environment就是这种类,静态类不能包含abstract和sealed修饰符,但是无法实例化静态类或从静态类派生,所以静态类的行为实际上是“抽象”和“密封”的。
静态类的特性:
1.所有的静态类都不显式的指定基类或所实现的接口列表,静态类都是隐式的从object类型继承的。
2.静态类只包含静态成员,其中常量和嵌套类型被看成是静态成员。
3.静态类不能派生所以不能含有protected 和protected internal访问修饰符。
4.静态类没有实例的构造函数,也不能提供任何默认的构造函数。
5.静态成员不会自动的成为静态,当一个类嵌套在一个静态的外层类中时,除非该类显式的包含static修饰符,否则该嵌套类不是静态类。
一下举一个静态类的例子:
using System;
namespace StaticClassTest
{
using L = Area.Perimeter;
static class Area
{
public const double π = 3.1415926;//被看做静态成员
public static double circleArea(double r)
{
return π * r * r;
//return Math.PI * r * r;
}
public static double rectArea(double length, double height)
{
return length * height;
}
public static double squareArea(double side)
{
return side * side;
}
public class Perimeter//被看做静态成员,Area.Perimeter
{
public double Cperim(double r)
{
return 2.0 * Math.PI * r;
}
}
}
class Test
{
public static void Main()
{
double[] area = new double[3];
area[0] = Area.circleArea(2.35);
area[1] = Area.rectArea(3.2, 2.36);
area[2] = Area.squareArea(3);
for ( int i = 0; i < area.Length;)
{
Console.WriteLine(area[i]);
i++;
}
L l = new L();
//此处说明不该内部类不是静态类
Console.WriteLine(l.Cperim(2.35));
Console.ReadKey();
}
}
}
namespace StaticClassTest
{
using L = Area.Perimeter;
static class Area
{
public const double π = 3.1415926;//被看做静态成员
public static double circleArea(double r)
{
return π * r * r;
//return Math.PI * r * r;
}
public static double rectArea(double length, double height)
{
return length * height;
}
public static double squareArea(double side)
{
return side * side;
}
public class Perimeter//被看做静态成员,Area.Perimeter
{
public double Cperim(double r)
{
return 2.0 * Math.PI * r;
}
}
}
class Test
{
public static void Main()
{
double[] area = new double[3];
area[0] = Area.circleArea(2.35);
area[1] = Area.rectArea(3.2, 2.36);
area[2] = Area.squareArea(3);
for ( int i = 0; i < area.Length;)
{
Console.WriteLine(area[i]);
i++;
}
L l = new L();
//此处说明不该内部类不是静态类
Console.WriteLine(l.Cperim(2.35));
Console.ReadKey();
}
}
}