类模块另外一种更为抽象的用法是作为接口,Excel VBA中没有真正的接口这种东西,接口也是使用类来实现的。
以前提到过,为了能够让代码复用,很重要的一点就是要尽量将要实现的方法抽象出来,尽量的去满足多种情况,而接口也能理解为是一种抽象,接口抽象到只定义要实现的方法和属性,只要实现了定义的方法和属性的类,就表示他们是同一种对象。
1、定义接口:
和创建类的方法一样,插入类模块,命名为Tester,创建属性、方法等:
Property Let TestValue(Value As Long)
End Property
Sub TestInterface()
End Sub
不需要具体的实现,只要一个框架就可以。
2、实现接口:
另外创建一个类,命名为CTest,输入语句:
Implements Tester
这个是必须的,说明CTest类要去实现Tester的方法、属性。
这个时候,可以尝试点击菜单调试-编译:
没有实现Tester里面定义的方法、属性,所以报错。
点击代码编辑器的上面下拉框,选择Tester,自动插入代码:
Private Property Let Tester_TestValue(RHS As Long)
End Property
这个就是Tester里面定义的属性,这时候可以再尝试点击菜单调试-编译,还是会出现那个提示,因为还有一个方法没有实现,点击右边的下拉框,点击TestInterface,自动插入代码:
Private Sub Tester_TestInterface()
End Sub
这时候,再点击调试就不会出提示了,因为CTest类已经实现了Tester定义的方法和属性。
3、使用接口:
在Tester_TestInterface里添加一条语句进行测试:
Private Sub Tester_TestInterface()
MsgBox "TestInterface"
End Sub
普通模块测试代码:
Sub TestInterface()
Dim ci As Tester
Set ci = New CTest
ci.TestInterface
Set ci = Nothing
End Sub
定义的是Tester类型变量,但是却可以赋值CTest变量,这就是接口的特殊之处。
所以接口的作用非常的强大,想象一下,有一个非常复杂的数据处理过程,比如是数据排序,一般情况下都是将一维数组进行排序,一旦碰上了另外的数据结构,那么这个排序方法就要去修改了。
这种情况就可以使用接口进行抽象,把排序需要用到的方法和属性抽象出来,一般排序用到的就是Len(返回数据的个数)、Less(比较2个数据的大小)、Swap(交换2个数据的位置)。然后排序函数传入的参数修改为这个接口,再碰到新的数据结构需要排序的时候,只需要创建1个类,去实现那3个接口就可以了,能够极大的简化编码的过程。