前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >类模块——接口

类模块——接口

作者头像
xyj
发布2020-07-28 11:40:37
4020
发布2020-07-28 11:40:37
举报
文章被收录于专栏:VBA 学习VBA 学习

类模块另外一种更为抽象的用法是作为接口,Excel VBA中没有真正的接口这种东西,接口也是使用类来实现的。

以前提到过,为了能够让代码复用,很重要的一点就是要尽量将要实现的方法抽象出来,尽量的去满足多种情况,而接口也能理解为是一种抽象,接口抽象到只定义要实现的方法和属性,只要实现了定义的方法和属性的类,就表示他们是同一种对象。

1、定义接口:

和创建类的方法一样,插入类模块,命名为Tester,创建属性、方法等:

代码语言:javascript
复制
Property Let TestValue(Value As Long)

End Property

Sub TestInterface()
    
End Sub

不需要具体的实现,只要一个框架就可以。

2、实现接口:

另外创建一个类,命名为CTest,输入语句:

代码语言:javascript
复制
Implements Tester

这个是必须的,说明CTest类要去实现Tester的方法、属性。

这个时候,可以尝试点击菜单调试-编译:

没有实现Tester里面定义的方法、属性,所以报错。

点击代码编辑器的上面下拉框,选择Tester,自动插入代码:

代码语言:javascript
复制
Private Property Let Tester_TestValue(RHS As Long)

End Property

这个就是Tester里面定义的属性,这时候可以再尝试点击菜单调试-编译,还是会出现那个提示,因为还有一个方法没有实现,点击右边的下拉框,点击TestInterface,自动插入代码:

代码语言:javascript
复制
Private Sub Tester_TestInterface()
    
End Sub

这时候,再点击调试就不会出提示了,因为CTest类已经实现了Tester定义的方法和属性。

3、使用接口:

在Tester_TestInterface里添加一条语句进行测试:

代码语言:javascript
复制
Private Sub Tester_TestInterface()
    MsgBox "TestInterface"
End Sub

普通模块测试代码:

代码语言:javascript
复制
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个接口就可以了,能够极大的简化编码的过程。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 VBA 学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档