OOP接口的妙用, 在多种语言中都可以体会到,Java,Golang . . .,当然,VBA也不例外。
尽管VBA 不支持继承,带来一些麻烦,但居然支持接口。
这里记录一下,接口创建,运用的一些方法,以备后用。
1. 先创建一个类模块,这个名称作为接口名称,里面只增加方法的名称和参数原型,没有内容。
-
Public Function GenerateRecordValue() as String
-
End Function
2. 在需要实现接口目标类模块中开始的地方增加代码, 例如:
-
Implements InterfaceClassModuleName
3. 在实现方法定义时,需要用接口类名称作为实现接口方法的前缀。例如:
-
Private Function SqlDataInterface_GenerateRecordValue() as String
-
blabla implementation code here
-
SqlDataInterface_GenerateRecordValue = resultString
-
End Function
4. 调用方法,如何体会到接口的好处呢,比如一个类,有它本身的类名,但是当要用到或特定接口功能的时候,可以这样用:
-
Dim sdi as SqlDataInterface
-
Set sdi = Record
-
SqlRecordValueString = sdi.GenerateRecordValue
这样就完成了对SqlDataInterface相关方法的调用,尽管官方宣传,不支持多态,但是这似乎就是多态的一种类似实现吧。VBA一个主类对象,支持实现多种接口类的方法,以完成很多精妙调用。
想象一下,有点像孙悟空72变,变成啥,就有啥的能力(方法)。
来一个完整的例子:
-
'TestInterface1 class Module
-
Option Explicit
-
-
Public Function HelloWorld() As String
-
End Function
-
-
'TestInterface2 class Module
-
Option Explicit
-
-
Public Function HelloWorldAlt() As String
-
End Function
-
-
-
'InterfaceMain Class Module
-
Option Explicit
-
-
Implements TestInterface1
-
Implements TestInterface2
-
-
-
Private Function TestInterface1_HelloWorld() As String
-
-
TestInterface1_HelloWorld = "This is from Interface1"
-
-
End Function
-
-
Private Function TestInterface2_HelloWorldAlt() As String
-
-
TestInterface2_HelloWorldAlt = "This is from Interface2"
-
-
End Function
-
-
'In any Standard Module
-
-
Public Sub TestInterface()
-
Dim TestOne As TestInterface1
-
Dim TestTwo As TestInterface2
-
Dim mainObj As New InterfaceMain
-
Set TestOne = mainObj
-
Debug.Print TestOne.HelloWorld
-
Set TestTwo = mainObj
-
Debug.Print TestTwo.HelloWorldAlt
-
End Sub
2021-12-11
作者
阅读(1452) | 评论(0) | 转发(0) |