温故而知新-----静态类与静态成员
静态类与非静态类基本相同,但静态类不能实例化。使用类名访问类的成员。
对于只对输入参数进行运算而不获取或设置任何内部实例字段的方法集,静态类可以很方便的用作这些方法集的容器。
demo:在.NET Framework类库中,静态类Syetem.Math包含的方法只执行数学运算,而无需存储或检索特定Math类实例特有的数据。也就是通过指定类名和方法名来应用类成员。
double dub=-2.1;
Console.WriteLine(Math.Abs(dub));
Output:2.1
和所有类型一样,当加载引用静态类的程序时,.NET FrameWork CLR将加载该静态类的类型信息。程序不能指定加载静态类的确切时间。但是,可以保证在程序中首次引用该类之前加载该类,并初始化该类的字段并调用其静态构造函数(只调用一次,在程序驻留在应用程序域的生命周期内,静态类一直保留在内存中)。
静态类主要特点:
- 仅包含静态成员。
- 不能实例化。
- 密封。
- 不能包含实例构造函数。
创建静态类与创建只包含静态成员和私有构造函数(阻止类被实例化)的类基本相同。静态类的有点在于:编译器能够执行检查以确保不致偶然的添加实例成员(编译器将保证不会创建此类的实例)。
非静态类可以包含静态的方法、字段、属性和事件。即使没有创建类的实例,也可以调用该类中的静态成员(通过类名而不是实例名称访问静态成员)。无论一个类创建多少个实例,它的静态成员都只有一个副本。静态方法和属性不能访问其包含类型中的非静态字段和事件,并且不能访问任何对象的实例变量(除非在方法参数中显示传递)。
常见的是声明具有一些静态成员的非静态类,而不是声明静态类。静态字段有两个常见的用法:
一是记录已实例化对象的个数,而是存储必须在所有实例之间共享的值。
静态方法可以重载但不能重写,因为它们属于类,不属于类的任何实例。