在数据存储方式上,类不同于标准模块。标准模块的数据不可能多于一份。这意味着若程序中某个部分改动了标准模块的公共变量,随后程序的其它部分读取该变量会得到该值。
相反,类模块数据则独立存在于每个类的实例中。
应避免使类中的代码依赖于全局数据─ 即标准模块中的公共变量。一个类可能同时存在很多个实例,所有这些对象都共享部件中的全局数据。
在类模块中使用全局变量不符合面向对象编程的封装概念,因为这种类创建的对象没有包含它所有的数据。不过,有时要让同一个类模块创建的所有对象共享一个数据成员。例如,一个类所创建的所有对象要共享一个属性值,如部件的名称或版本号。
这种对封装的故意违反有时称之为静态的类数据。通过使用 Property 过程设置并返回标准模块中的 Public 数据成员,就可以在 Visual Basic 的类模块中实现静态的类数据,如下面代码段所示:
'
返回应用程序名的只读property
。Property Get ComponentName() As String
'
变量gstrComponentName
存储于标准模块中,声明为Public
。ComponentName = gstrComponentName
End Property
通过提供一个相关的 Property Let 过程─ 或对包含对象引用的属性使用 Property Set 过程─ 给标准模块中的数据成员赋新值,可以实现非只读的静态的类数据。
重点 在设计使用静态数据的类时,要考虑到所写的部件要为若干个客户端应用程序(如果是进程外部件)或者为一个客户端以及若干个进程内部件(如果是进程内部件)提供对象。即使该类创建的所有对象被不同的客户端使用,但都共享该静态数据。