向类中添加方法

类的方法就是所声明的 Sub 或者 Function 公用过程。既然按照缺省规定 Sub 过程和 Function 过程都是公用的,那么在创建方法时就更加无须指明 Public 关键字。

例如,为了给 Account 类创建 Withdrawal 方法,可将下面的 Public Function 过程添加到类模块中:

Public Function WithDrawal(ByVal Amount As Currency, _
ByVal TransactionCode As Byte) As Double
   '(提款并返回新余额,或者产生透支错误的代码。)
End Function

提示   尽管并不需要键入 Public 关键字,但是这样做是一种好的编程习惯,可使以后维护代码的人明确其意图。

将方法声明为 Public 子过程

返回新余额是可选的,原因在于调用 Withdrawal 方法后,可再调用 Account 对象的 Balance 属性。这样就可以将 Withdrawal 代码编写为一个 Public Sub 过程。

提示   如果发现几乎每次调用 Withdrawal 时,都要调用 Balance,那么返回新余额会更有效一些。这是因为,就象在“添加类模块属性”中所说明的那样,任何属性访问,甚至读取一个公有的变量,都意味着一个函数调用—显式或者隐式的 Property Get。

重点   下面的名字不能作为属性名或方法名,因为它们属于下一级的 IUnknown 和 IDispatch 接口:QueryInterface、AddRef、Release、GetTypeInfoCount、GetTypeInfo、GetIDsOfNames 和 Invoke。这些名字将引起编译错误。

详细信息    关于 Sub 和 Function 过程的详细信息,请参阅“编程基础”中的“过程概述”。

保护实现的细节

类的公共接口是由类模块的属性和方法声明来定义的。同数据隐藏一样,声明为 Private 的过程也不是接口的组成部分。这意味着可以更改类模块内部使用的实用程序的过程,而不影响使用该对象的代码。

更重要的是,也可以更改方法实现的内部公用 Sub 或者 Function 过程的代码,而不影响使用该方法的代码。只要不改变过程参数的数据类型,或者不改变 Function 过程所返回的数据类型,接口就不会改变。

将对象的实现细节隐藏在接口之后,是封装的另一方面。封装可以增强方法的性能,或者完全改变方法的实现途径,而不必对使用该方法的代码进行更改。

注意   接口元素命名指南—这在“命名属性、方法和事件”中作了讨论—不仅仅适用于属性名和方法名,而且适用于定义方法的 Sub 和 Function 过程中的参数名。当在“对象浏览器”中查看这些方法时,这些参数名是可见的,而且当调用该方法时,可以将之作为命名的参数来使用(即,parametername:=value)。

详细信息   命名的参数是在“编程基础”中的“向过程传递参数”中引入的。

将方法添加到窗体类中,是一种功能强大的编程技巧,这在“定制窗体类”中作了讨论。

有时,某个成员应该选择属性还是方法,是不太清楚的。下面的“选择属性还是方法?”提供了指南。