VBA中类的解读及应用第三十五讲 类对象的生死轮回----“二师兄”的成长历程之七
2026/6/9 4:40:56 网站建设 项目流程

《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实践经验,全部浓缩在下面的各个教程中:

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询