模块中为何能查看类clsPerson的私有变量pNameFirst?技术咨询
为什么VBA类的私有变量会在Locals窗口显示?
这其实是VBA调试工具的正常特性,你完全没写错代码!别担心你的封装逻辑失效了,原因主要有这几点:
Private修饰符的作用范围是代码层面,而非调试层面:VBA里的Private关键字只是用来限制其他模块/类在编译、运行时直接访问这个变量,它的设计目的是封装代码逻辑,防止外部误操作内部状态,但并不会对调试工具隐藏这些成员。Locals窗口的核心作用是让开发者能看到对象的完整内部状态,方便排查bug,所以不管变量的访问权限是什么,它都会把所有成员列出来。- 举个实际的代码例子,假设你的
clsPerson类是这么写的:
虽然外部模块的代码不能直接写Private pNameFirst As String Public Property Get FirstName() As String FirstName = pNameFirst End Property Public Property Let FirstName(value As String) pNameFirst = value End PropertyobjPerson.pNameFirst(编译器会报错),但调试时Locals窗口依然会显示这个私有变量——这完全是正常的,你的封装逻辑依然生效,外部代码还是无法直接修改它。 - 如果你真的想在调试时也隐藏私有变量,VBA本身没有原生的支持,但可以通过一些进阶技巧间接实现(比如把私有变量放到一个嵌套的私有内部类里),不过通常来说没必要,因为调试时能看到内部状态反而能帮你更快定位问题。
内容的提问来源于stack exchange,提问作者Gadziu
相关产品推荐
相关产品推荐

