Chinaunix首页 | 论坛 | 博客
  • 博客访问: 451002
  • 博文数量: 101
  • 博客积分: 1547
  • 博客等级: 上尉
  • 技术积分: 1072
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-12 23:46
个人简介

music,code,dialog,rest

文章分类

全部博文(101)

文章存档

2023年(8)

2022年(25)

2021年(6)

2020年(2)

2019年(6)

2018年(4)

2017年(5)

2016年(20)

2015年(4)

2014年(2)

2013年(1)

2012年(1)

2011年(1)

2010年(1)

2009年(2)

2007年(10)

2006年(3)

分类: Windows平台

2021-12-11 07:25:35

OOP接口的妙用, 在多种语言中都可以体会到,Java,Golang . . .,当然,VBA也不例外。
尽管VBA 不支持继承,带来一些麻烦,但居然支持接口。
这里记录一下,接口创建,运用的一些方法,以备后用。

1. 先创建一个类模块,这个名称作为接口名称,里面只增加方法的名称和参数原型,没有内容。

点击(此处)折叠或打开

  1. Public Function GenerateRecordValue() as String
  2. End Function

2. 在需要实现接口目标类模块中开始的地方增加代码, 例如:

点击(此处)折叠或打开

  1. Implements InterfaceClassModuleName

3. 在实现方法定义时,需要用接口类名称作为实现接口方法的前缀。例如:

点击(此处)折叠或打开

  1. Private Function SqlDataInterface_GenerateRecordValue() as String
  2.      blabla implementation code here
  3.      SqlDataInterface_GenerateRecordValue = resultString
  4. End Function
4. 调用方法,如何体会到接口的好处呢,比如一个类,有它本身的类名,但是当要用到或特定接口功能的时候,可以这样用:
          

点击(此处)折叠或打开

  1. Dim sdi as SqlDataInterface
  2. Set sdi = Record
  3. SqlRecordValueString = sdi.GenerateRecordValue
这样就完成了对SqlDataInterface相关方法的调用,尽管官方宣传,不支持多态,但是这似乎就是多态的一种类似实现吧。VBA一个主类对象,支持实现多种接口类的方法,以完成很多精妙调用。
想象一下,有点像孙悟空72变,变成啥,就有啥的能力(方法)。

来一个完整的例子:

点击(此处)折叠或打开

  1. 'TestInterface1 class Module
  2. Option Explicit

  3. Public Function HelloWorld() As String
  4. End Function

  5. 'TestInterface2 class Module
  6. Option Explicit

  7. Public Function HelloWorldAlt() As String
  8. End Function


  9. 'InterfaceMain Class Module
  10. Option Explicit

  11. Implements TestInterface1
  12. Implements TestInterface2


  13. Private Function TestInterface1_HelloWorld() As String

  14.     TestInterface1_HelloWorld = "This is from Interface1"

  15. End Function

  16. Private Function TestInterface2_HelloWorldAlt() As String

  17.     TestInterface2_HelloWorldAlt = "This is from Interface2"

  18. End Function

  19. 'In any Standard Module

  20. Public Sub TestInterface()
  21.     Dim TestOne As TestInterface1
  22.     Dim TestTwo As TestInterface2
  23.     Dim mainObj As New InterfaceMain
  24.     Set TestOne = mainObj
  25.     Debug.Print TestOne.HelloWorld
  26.     Set TestTwo = mainObj
  27.     Debug.Print TestTwo.HelloWorldAlt
  28. End Sub






2021-12-11
作者




阅读(1452) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~