VBA中类的解读及应用第三十五讲 类对象的生死轮回----“二师兄”的成长历程之七

《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。

类,是非常抽象的,更具研究的价值。随着我们学习、应用VBA的深入,有必要理解这些抽象的理论知识。对象,类,过程,方法,属性,事件,接口,接口如何实现等等。掌握了这些理论,不仅对于VBA这种寄生语言的实质有所深入的理解,也对自然界的很多事物将同样有所感悟。目前,这套教程程序文件已经通过32位,64位两种office系统测试。

这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是VBA中类的解读及应用第三十五讲 类对象的生死轮回----"二师兄"的成长历程之七

【分享成果,随喜正能量】吃素不难,难于不肯捨贪口腹之心。若不贪口腹,有何吃素之不便乎。虽吃华素,不吃素日,亦须少吃。以一切物类,皆是贪生怕死,皆知疼痛苦楚。但以口不能言,故为人作食料。倘其能言,其临杀之悲哀怨恨,尚忍闻之乎。思及此,则肉自不便下咽矣。拜经念佛,当以恭敬至诚为本。恭敬大,则功德利益大。恭敬小,则功德利益小。若不恭敬,但做道场,则是自欺。欲欺人尚不能,况欺佛菩萨乎。祈真实恭敬行去,其利益莫大焉。

第三十五讲 类对象的生死轮回----"二师兄"的成长历程之七

大家好,我们继续我们的课程,类对象的生命。这是"二师兄"的成长历程之七,是一个非常有意义的章节。

1 类对象的生和死

提到生命,其实就是两个字:生、死。如果单单只是建立了类,只是有了魂,还不能是"生",什么时候是"生"呢?就是"魂+肉身"的组合,这个时候才能说是类的"生",那么什么时候类具有肉身呢?就是我们实例化类的时候。也就是说在我们实例化类的时候,才能说是类的"生"。同理,如果类的肉身没有了,那么这个类也就消亡了,但魂还是存在的,等到再次重生。

那么实例化类产生生命是如何体现出来的呢?这个指标就是内存的占用。就相当于我们人类具有生命的指标是心脏在跳动(也有脑死亡之说),类对象是否占用内存就是类对象具有生命的指标。

任何程序的运行都需要占用一定的内存,内存是一种有限的资源,所以不能随意浪费。占用完,必须要返还给系统,以备其他程序使用。

2 类对象与内存的占用

对于一般变量来讲,我们不用考虑它占用的内存的释放问题,因为VBA没有指针的概念(严格来讲,VBA还是有指针的,只是非常少用),所以不存在多个变量指向相同的内存地址。如果一段内存地址永远只被一个变量所指向,那事情就非常好办了,该变量何时离开它的作用域,它所指向的内存就何时被系统释放回收。所以对于一般变量,我们完全不用考虑其占用内存的释放问题。

但是对于类对象变量来讲,是什么情况呢?我们来看下面的代码:

Sub mynz_35()

Dim objpigsy As pigsy

Set objpigsy = New pigsy

objpigsy.Name = "猪悟能"

objpigsy.Gender =Male

objpigsy.Speak

End Sub

代码截图:

代码解析:略

在本讲的上半部分我们谈到了,类对象的生命及体现的指标,这个指标就是内存的占用。开始占据内存空间看作是类对象的生,释放内存空间被看作是类对象的死。

3 类对象的生命过程

那么,类对象objpigsy从什么时候开始占据内存空间的?这个内存空间又是何时返还给系统的?

在之前的讲解中我们谈到,类对象的初始化的时候,类与生俱来的2个事件:Class_Initialize(实例化事件)和Class_Terminate(销毁事件)。这两个事件,刚好对应着类对象的生与死。

类对象开始占据内存空间的时候,Class_Initialize就被触发,Class_Initialize(如果你为实例化事件写了事件代码的话)中的代码就会自动执行。相反,Class_Terminate,是在最后一个指向该内存空间的对象变量被置为Nothing的时候,被触发。在Class_Terminate中,我们主要是做一些对象销毁前的善后工作,比如释放类对象内部的一些资源等,这个要等到创建多个类之间的关系的时候才会谈到。

为了更清楚的给大家演示类的出生和死亡,我们添加如下的代码:

Private Sub Class_Initialize()

Debug.Print "二师兄睁开了眼睛,欣欣然望着这个美好的世界!"

Situation = "一般"

End Sub

Private Sub Class_Terminate()

Debug.Print "功成与名就,如梦幻泡影,如露亦如电,我将去西方极乐!"

End Sub

代码截图:

代码解析:略

我们使用F8快捷键逐语句执行MYNZ中的代码,你就能清楚的知道,当你执行Set objpigsy = New pigsy的时候,类对象的实例化事件被触发。如下截图:

当你执行End Sub的时候,类对象的销毁事件被触发。

今日内容回向:

1 类对象的生命是指什么?

2 类对象的生命指标是什么?

本讲内容参考程序文件:VBA-CLASS(35).xlsm

我20多年的VBA实践经验,全部浓缩在下面的各个教程中:

相关推荐
VBA633714 小时前
VBA高级应用30例 应用6 第5部分:5 利用VBA从XML文件中导出数值数据
vba
VBA63379 天前
VBA信息获取与处理专题七第二节 网络通信过程的解读
vba
VBA633714 天前
数组与字典解决方案第二十九讲 数组的创建方法小结及回填的注意事项
vba
小妖6661 个月前
excel 怎么在单元格内容自动加上一段文字不能用公式
excel·vba
VBA63371 个月前
VBA之Word应用第五章第五节 Range对象的属性(四)
vba
VBA63371 个月前
VBA信息获取与处理专题七第一节 网络通信基础
vba
yivifu1 个月前
怎样将Word文档中脚注引用后面的空格轻松删除
word·vba
VBA63371 个月前
VBA之Excel应用第五章第四节 变量的生命周期
vba
SunnyDays10111 个月前
使用 C# 添加、修改和删除 Excel VBA 宏 (无需 Microsoft Office Interop)
c#·excel··vba