当前位置: 首页 > news >正文

VBA中类的解读及应用第三十四讲 枚举的利用----“二师兄”的成长历程之六

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

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

这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是VBA中类的解读及应用第三十四讲 枚举的利用----“二师兄”的成长历程之六

【分享成果,随喜正能量】生活就像是一杯苦茶,而情感是茉莉花,调兑在一起,才会馥郁芬芳。人活在世上,有诸多苦楚萦心,若不懂得自我调解,终究会被纷呈的世相掩埋。所以,更多的时候,我们要淡看事世,只有这样,才可淡然前行,自在清明。

第三十四讲 枚举的利用----“二师兄”的成长历程之六

大家好,今日继续类的讲解,到上一讲,我们的pigsy类的羽翼已经逐渐丰满,本篇的内容将让它变得更加专业。

不知道你注意到没有,pigsy类中对Gender(性别)属性的设计存在一点缺陷:我们用私有模块级字符串变量myGender宿主来保存性别数据,既然是一个字符串变量,那就可以往里面保存任何字符串数据,比如“女”,“女性”,“Female”,“男”,“男性”,“male”。虽然字面上都是可以理解的意思,但是写法上都不相同,你无法控制使用者会给myGender赋什么值,这样就会造成信息处理和判断上的混乱。作为一个较为专业的类的设计者,我们要提供一套规范的取值范围。

在上面的文字中,我提到了六个取值,这些值可以说是一个相对固定的常量,我们可以在类中使用像这种固定的常量名称,这种在类中使用常量的方式是非常普遍的。现在我们就来介绍如何在自己的类中使用这种常量。

1 枚举类型(Enumeration)的应用

这种常量实际上是枚举类型(Enumeration)中的一个值。我们在pigsy类的头部,为性别属性定义一个枚举类型pGender:

Public Enum pGender

Female

Male

End Enum

这里的枚举是pGender,其中“p”代表类名“pigsy”我们定义的是公有的(Public)枚举类型,这个枚举类型在整个项目范围内都是可见的,将类名缩写作为前缀有利于与其他类中的枚举类型相互区分。

  • 特别注意点:一般的常量在定义的时候,需要给定一个常量值,可以为各种类型,比如Const PI As Double = 3.14,就是双精度型。但是枚举类型常量很特殊,它只能是长整形(Long)比如Female = 0。但是我们这里连“=0”都没有写。如果什么都没写,叫表示“从0开始,依次加1”,所以上述代码与下述代码是一样的:

Public Enum pGender

Female = 0

Male = 1

End Enum

好了,枚举类型的定义就介绍到这里。我们来看看如何使用它。

  • 可以用Select Case 语句控制返回的枚举值

2 枚举在代码中的实际应用

有了pGender这个类型,我们就可以将性别属性定义为这种类型了。我们将

Private myGender As String 改为Private myGenderA As pGender,将Gender的读写属性做相应修改,相关代码最后效果如下:

Private myGenderB As pGender

Public Enum pGender

Female = 0

Male = 1

End Enum

Public Property Get Gender() As pGender

Gender = myGenderA

End Property

Public Property Let Gender(inGender As pGender)

Static myFlag As Boolean

If myFlag = False Then

myFlag = True

myGenderA = inGender

Else

MsgBox "对不起,二师兄不能做性别修改"

End If

End Property

类修改枚举部分的代码截图:

有了这些修改以后,我们在类的测试代码中,就会发现不一样的效果了,如下图:

通过以上的修正,类的使用者(模块1中的测试代码)在给性别赋值的时候,IDE的智能提示就会自动显示出来,供其选择。

类中的枚举常量使用起来非常简单,但是它极大地增加了类的友好性,也是开发人员专业性的直观体现。是一项投资回报率非常高的技能。

今日内容回向:

1 本讲中讲了枚举,读者是否明白了?

2 本讲的代码中类的属性是否发生了改变?

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

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

http://www.jsqmd.com/news/754600/

相关文章:

  • Jetway B903DMTX工控机:接口丰富性与工业级设计解析
  • Qwen3大模型微调实战:隐私保护与性能优化
  • AI驱动PRD生成:产品经理如何用大模型提升文档效率
  • 曲轴工艺及夹具设计(论文说明书+CAD图纸+工序卡+工艺过程卡)
  • 如何通过curl命令直接测试Taotoken的聊天补全接口
  • RLVR技术:优化LLM记忆机制的新方法
  • 教育科技公司构建多模型评测平台的技术选型与实践
  • Notepad++ NppExec插件的使用
  • Pappus定理的隐藏玩法:在计算机图形学与CV中意想不到的应用
  • Python通达信数据获取实战指南:高效股票行情分析与量化投资
  • LLM输入长度优化:openclaw-token-optimizer 实战指南
  • 视频扩散模型的长时序优化与实时生成技术
  • 别再忍受RuoYi默认菜单了!手把手教你用SCSS和Vue自定义一套科技感侧边栏
  • 语言模型推理能力提升:错误链式思维数据的价值与应用
  • Vivado里时序报告总飘红?别慌,这5个实战技巧帮你搞定FPGA时序收敛
  • 0102华夏之光永存:国产光刻机突围全景:高端光刻胶与特种耗材(B级 短期优先突破)
  • Orchard-Kit:现代Web全栈开发套件的架构解析与实践指南
  • PowerToys Run集成ChatGPT:打造Windows系统级AI助手
  • ESP32-C6开发板物联网与HMI应用实战解析
  • 利用快马AI十分钟搭建mobaxterm网页版原型,快速验证远程终端设计
  • 开源GLM免费API服务部署指南:从原理到实战应用
  • 华硕笔记本终极性能管家:G-Helper完整指南
  • 程序员福利:Wall开源照片墙的Docker化部署与二次开发指南(SpringBoot+Vue)
  • 深度解析Switch大气层系统:从架构设计到性能优化的完整指南
  • 蓝牙开发避坑指南:从‘属性表’设计到‘特征值’读写,我的ESP32踩坑实录
  • STM32 IIC驱动AP3216C环境传感器,手把手教你实现手机同款自动亮度与接近感应
  • 从CSS注入到Manifest V3:构建高效浏览器扩展的实战指南
  • Proxmox VE Helper-Scripts:一键自动化部署家庭实验室与服务器应用
  • OPC UA 2026正式版已发布:C#工程师如何72小时内完成旧系统无缝升级?
  • CodeX windows app使用第三方api以及session记录还原