类的成员变量作用范围是整个类吗(私有变量与类属性的关系)
【分享成果,随喜正能量】再大的困难,也大不过人心。再高的天空,也不如人心高。很多人一辈子辛苦,争来争去,什么都要计较,过得苦不堪言,到最后才发现根本没有一样东西是属于自己的,这才是最大的悲哀。人生如梦,一旦梦醒了,梦中幻想的那些东西也就不存在了,可能它们也从来没有那么重要过。
《VBA中类的解读及应用》教程是我推出的第五套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。
类,是非常抽象的,更具研究的价值。随着我们学习、应用VBA的深入,有必要理解这些抽象的理论知识。对象,类,过程,方法,属性,事件,接口,接口如何实现等等。掌握了这些理论,不仅对于VBA这种寄生语言的实质有所深入的理解,也对自然界的很多事物将同样有所感悟。目前,这套教程程序文件已经通过32位,64位两种office系统测试。
这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:私有变量与类属性的关系
第三十三讲 “二师兄”的成长历程之五----私有变量与类属性的关系
大家好,我们继续关注二师兄的成长,在上一讲中,我们讲了两个属性Name及DOB的设置,同时我讲解了限制字符长度及“只赋值一次”的实现方案。这些在我们实际工作中利用都是非常多的,希望大家都能掌握这些方法。今日我们继续添加属性。
4 Age(年龄)属性有了出生日期,很自然的你会联想到计算年龄。当然这是一个只读属性了。我们定义年龄属性如下
Public Property Get Age() As Integer
Age = DateDiff("yyyy", myDOB, Date)
End Property
代码解析:以上过程实现了AGE的只读属性,它的值是通过函数DateDiff计算得来。
到这里pigsy类的属性我们就全部建立完成了。
看下面的截图:
我们看出:类中的模块级私有变量(可以称之为宿主或者容器)与类的属性之间,可以不必存在一一对应的关系。例如myDOB这个模块级的私有变量,既可以和DOB/DOBA对应,还能和Age对应起来。如果拿数据库中的表对象和查询对象来类比的话,myDOB好比表对象,DOB,DOBA,Age属性好比基于表对象的查询,表对象任何时候都不允许用户直接读写,用户必须通过查询来读写数据。这就是类中属性的定义与属性的实现之间的核心观点。
最后将最终的代码贴给大家:
类代码
' pigsy类代码
【代码见教程】
End Sub
下面我们做一下测试代码:
Sub MYNZ_32()
Dim objpigsy As pigsy
Set objpigsy = New pigsy
objpigsy.Name = "猪悟能"
objpigsy.Gender = "男"
objpigsy.Speak
MsgBox "修改前性别: " & objpigsy.Gender & Chr(13) & "下面将尝试修改性别为女"
objpigsy.Gender = "女"
MsgBox "修改后性别: " & objpigsy.Gender
objpigsy.DOB = #2/3/1520#
MsgBox objpigsy.Name & "的生日是:" & objpigsy.DOBA
MsgBox objpigsy.Name & "的年龄是:" & objpigsy.Age & "岁"
objpigsy.DOB = #6/10/1520#
MsgBox objpigsy.Name & "的生日是:" & objpigsy.DOBA
End Sub
代码的截图:
代码解析:上面的测试代码中,我们首先测试的是姓名,我们给出的值是"猪悟能",测试是通过的,当然我们也可以将这个值变成5个字符,大家可以自己测试一下;然后测试的是性别,赋值后要再次改变这个值,得到的结果是不能修改。然后我们又测试了出生时期和年龄的关系,大家可以试着自己测试一下,看看结果的不同提示。下面只给出部分的测试截图:
今日内容回向:
1 属性和宿主是什么关系?
2 宿主或者容器如何理解?
本讲内容参考程序文件:VBA-CLASS(32-33).xlsm
我20多年的VBA实践经验,全部浓缩在下面的各个教程中:
【分享成果,随喜正能量】很多事,不是你想,就能做到的。很多东西,不是你要,就能得到的。很多人,不是你留,就能留住的。不要把什么都看得那么重。人生最怕什么都想计较,却又什么都抓不牢。失去的风景,走散的人,等不来的渴望,全都住在缘分的尽头。何必太执着,该来的自然来,会走的留不住。放开执念,随缘是最好的生活。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com