静态和实例类成员

  属性、方法和字段等成员是对象实例所特有的,此外,还有静态成员(也称为共享成员,尤其是 Visual Basic 用户常常使用这个术语),例如静态方法、静态属性或静态字段。静态成员可以在类的实例之间共享,所以可以将它们看成类的全局对象。静态属性和静态字段可以访问独立于任何对象实例的数据,静态方法可以执行与对象类型相关、但与对象实例无关的命令。在使用静态成员时,甚至不需要实例化对象。

  例如,前面使用的 Console.WriteLine()Convert.ToString() 方法就是静态的,根本不需要实例化 Consoleconvert 类(如果试着进行这样的实例化,操作会失败,因为这些类的构造函数不是公共访问的,如前所述)。

  许多情况下,静态属性和方法有很好的效果。例如,可以使用静态属性跟踪给类创建了多少个实例。在 UML 语法中,类的静态成员带有下划线,如图 8-5 所示

图 8-5

  1. 静态构造函数

  使用类中的静态成员时,需要预先初始化这些成员。在声明时,可以给静态成员提供一个初始值,但有时需要执行更复杂的初始化,或者在赋值、执行静态方法之前执行某些操作。

  使用静态构造函数可以执行此类初始化任务。一个类只能有一个静态构造函数,该构造函数不能有访问修饰符,也不能带任何参数。静态构造函数不能直接调用,只能在下述情况下执行:

   ● 创建包含静态构造函数的类实例时

   ● 访问包含静态构造函数的类的静态成员时

  在这两种情况下,会首先调用静态构造函数,之后实例化类或访问静态成员。无论创建了多少个类实例,其静态构造函数都只调用一次。为了区分静态构造函数和本章前面介绍的构造函数,也将所有非静态构造函数称为实例构造函数。

  2. 静态类

  我们常常希望类只包含静态成员,且不能用于实例化对象(如 Console)。为此,一种简单的方法是使用静态类,而不是把类的构造函数设置为私有。静态类只能包含静态成员,不能包含实例构造函数,因为按照定义,它根本不能实例化。但静态类可以有一个静态构造函数,如上一节所述。

  如果以前完全没有接触过 OOP,在阅读本章的其他内容之前,应该停下来将 OOP研究一番。在学习更复杂的 OOP 内容之前,全面掌握基础知识是很重要的。