类的方法就是所声明的 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 关键字,但是这样做是一种好的编程习惯,可使以后维护代码的人明确其意图。
返回新余额是可选的,原因在于调用 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)。
详细信息 命名的参数是在“编程基础”中的“向过程传递参数”中引入的。
将方法添加到窗体类中,是一种功能强大的编程技巧,这在“定制窗体类”中作了讨论。
有时,某个成员应该选择属性还是方法,是不太清楚的。下面的“选择属性还是方法?”提供了指南。