前言:
目前姐妹们对“封装foreach”可能比较关心,我们都想要了解一些“封装foreach”的相关资讯。那么小编也在网络上网罗了一些有关“封装foreach””的相关资讯,希望大家能喜欢,咱们快快来了解一下吧!【分享成果,随喜正能量】 遇到的事要善意,遇到的事要善待,所处的事要善良,遭遇的状况要善用,善意善待,善良善用,积善成德, 积德成福。
《VBA中类的解读及应用》教程是我推出的第五套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。
类,是非常抽象的,更具研究的价值。随着我们学习、应用VBA的深入,有必要理解这些抽象的理论知识。对象,类,过程,方法,属性,事件,接口,接口如何实现等等。掌握了这些理论,不仅对于VBA这种寄生语言的实质有所深入的理解,也对自然界的很多事物将同样有所感悟。目前,这套教程程序文件已经通过32位,64位两种office系统测试。
这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是第28讲:类及使用类的接口规范
第二十八讲 为什么要使用类及使用类的接口规范
各位学员朋友好,对于类而言,我们在之前已经讲了很多,如果我们对之前的内容有了掌握,到这讲的学习会容易些。从这讲开始我们将要在理论和实践上再进一步的提高。并通过一系列的实例让大家看到类的全貌及类似于智能应用的过程,这讲的内容是:为什么要使用类。
通过之前各讲内容的学习及一些实例的讲解,我们清楚了在VBA中,所谓对象的加载就是对象实例化的过程,就是让对象具有某种魂的过程,例如当你加载某个窗体的时候,实际上你是在实例化这个窗体类。对于这种理论的理解是非常重要的,能理解接受这个理论,也就标志着我们从普通简单的编程转变到真正的具有编程思想的人员了。这个理论也是面向对象编程(OOP)的基本指导思想。
1 为什么使用类
类为基于它创建的所有对象定义了属性(Properties),方法(Metho),事件(Events),这些属性、方法和事件也称为类的接口(Interface)。对于类而言:
1) 数据和行为的封装
VBA的类模块能带给你的一个最大的好处,就是你可以将一些相关的数据和行为封装在这个类模块中。而在标准模块中你只需要实例化类并利用这个实例化的工具,对类模块的内容你可以不必关注,如我们在第27讲的第二段代码中我们实例了一个类MYNEWDYG,对象是tes,如下:
Sub mynzclass23_27_2()
Dim tes As MYNEWDYG
Set tes = New MYNEWDYG
For Each rn In Range("a1", Cells(rows.Count, 1).End(xlUp))
Set tes.DYGB = rn
Next
i = 1
Do While Cells(i, "l") <> ""
tes.TJ = Cells(i, "L")
Cells(i, "m") = tes.QSA
Cells(i, "N") = tes.QSB
i = i + 1
Loop
End Sub
在这个标准模块中我们给类模块传递了两次数据Set tes.DYGB = rn;tes.TJ = Cells(i, "L")
从类模块中返回了两个数据Cells(i, "m") = tes.QSA;Cells(i, "N") = tes.QSB,类是我们封装数据的校验过程。我们用一个简单的图模拟这一过程如下:
我们看到,这类似于函数。
2) 将复杂的实现逻辑隐藏起来
在我的第二套教程《VBA数据库解决方案》中数据集是随处可见的,这里的数据集Recordset也是一个实例的类。对于这个Recordset,我们同样也是使用,拿来为我所用即可,说的不客气一点,天知道它是怎么将表中的数据读取到内存,还有一个游标说它目前指向的那一行数据,你只需知道执行一下MoveNext方法,它就指向到了下一行。只需要知道这样操作,就能得到相应的结果,至于它背后是如何实现的,这不是你需要操心的事情。但可贵的一点是我们可以心安理得的保持这种无知的状态,正是因为类有这种独特的隔离特性,使得程序员与程序员之间的分工协作也变得非常容易。一个大型的项目就是由很多程序员合作编出来的。在这里你也能感受到接口的重要性。
3)让程序员之间的分工写作变得容易
我们之所以使用类,正是由于上面的两点的支持,可以让程序员之间的分工写作变得容易。这是从一个工程的系统化的角度来说明的,细化分工,合作是社会的主流,在我们编写代码的时候也是同样的,一项大型的工程,要利用到很多的资源,这些资源之间实现有效的整合,是实现系统工程的先决条件,这里面有可控部分也有不可控的部分。对于总的整合来说每个类的输入和输出是需要可控的,而对于类的封装部分可以是不可控的,这给独立完成的程序员带来很大的灵活性。
如果我们作为一个全局的指挥,只要掌控可控部分即可。这一点是很容易理解的。
2 类的使用规范
类的使用规范:一旦发布了接口,就不能去修改了,但是可以添加新的接口
一个设计好了的类,肯定是要投入使用的,在你的项目的某个地方,肯定会用到这个类,写了一些代码,实例化这个类,然后修改了这个类对象的属性,调用了这个类对象的方法,可能还写了一些响应这个类对象的事件代码。并通过这个类完成了这个项目的一些功能。不久以后,你越看这个类越不顺眼,水平提高了嘛,你把这个类的属性,方法,事件全部删掉了,重新设计出一个你更加满意的类。当你洋洋得意的完工后,编译了一下你的项目,“咚”!编辑器跳出提示:编译错误,方法和数据成员未找到。这是很容易发生的事情。
回到编程的角度,我们有一个原则:你可以增加类,但是类的旧有接口一个都不要变,你只需要给它添加新的接口就行了。这样就确保了项目旧有的代码可以正确编译执行,同时你又为类添加了新的属性方法和事件。还是那句话,一旦发布了接口,就不能去修改了,但是可以添加新的接口。
我们再次回顾一下类接口的概念:类为基于它创建的所有对象定义了属性(Properties),方法(Metho),事件(Events),这些属性、方法和事件称为类的接口(Interface)。所以我们发布了类的接口指的是这个类的属性、方法和事件,我们一旦发布就不要再去变了,如果我们要改变可以采用升级的模式。就是再次发布新的接口。
这个思路不仅是作为类这块内容,也可以是程序的一个总的规范,我在做程序的时候,第一版往往是不带后缀,之后会不断的升级,-A,-B,-C,-D等等。这样的写法可以让自己的思路始终是清晰的,一旦有问题也可以很快找到问题的所在。
关于类接口的应用,大家不要急,我在后续的文章中还会有详细的应用介绍。
今日内容回向:
1 什么是类的接口?
2 如何理解类的发布规范。
本讲内容参考程序文件:VBA-CLASS(1-28).xlsm
我20多年的VBA实践经验,全部浓缩在下面的各个教程中:
【分享成果,随喜正能量】生命的意义在今生,在路上,在心底。去发现生机,创造生机,活出生活凝聚力,愿意去分享,愿意去点赞,活出生活源源不断的活力。
标签: #封装foreach