作为模块化字段访问修饰符的 Dim、Global、Public 和 Private 有啥区别?
Posted
技术标签:
【中文标题】作为模块化字段访问修饰符的 Dim、Global、Public 和 Private 有啥区别?【英文标题】:What is the difference between Dim, Global, Public, and Private as Modular Field Access Modifiers?作为模块化字段访问修饰符的 Dim、Global、Public 和 Private 有什么区别? 【发布时间】:2011-04-18 10:48:18 【问题描述】:在 VB6/VBA 中,您可以在特定的 Sub
或 Function
方法之外声明模块级变量。我在内部模块之前使用过Private
和Public
,并像这样理解它们:
Public
- 对模块内的所有代码和模块外的所有代码可见,本质上使其成为全局的。
Private
- 仅对模块内的代码可见。
我注意到您可以使用Dim
和Global
作为模块化变量的修饰符。 Dim
和 Global
分别与 Private
和 Public
在模块化字段上用作访问修饰符时不同吗?如果有,它们有何不同?
【问题讨论】:
【参考方案1】:Dim
和Private
的工作方式相同,但常见的约定是在模块级别使用Private
,在子/函数级别使用Dim
。 Public
和 Global
在功能上几乎相同,但是 Global
只能用于标准模块,而 Public
可以用于所有上下文(模块、类、控件、表单等)Global
来自旧版本的 VB,可能为了向后兼容而保留,但已被 Public
完全取代。
【讨论】:
感谢您的回答。你的解释和我一直在想的差不多。我从一大块遗留代码开始,这些代码在单个模块的声明部分中使用了所有四个修饰符。 全局变量在执行后保持其值。 将您的 cmets 与 Excel 2010 的在线帮助进行比较揭示了几个非常好的点:“使用 Public 语句声明的变量可用于所有应用程序的所有模块中的所有过程,除非选项私有模块位于效果;在这种情况下,变量仅在它们所在的项目内是公共的。此外,请注意:类模块中不能使用 Public 语句来声明固定长度的字符串变量。因为以上两者都是晦涩的用例,两者都不太可能成为实际问题。不过,为了完整性。 虽然问题只涉及模块级声明,但为了完整起见(对于新手而言),值得明确指出的是,Private
和 Public
甚至不允许在过程中使用。 Private
声明的 official documentation 在这方面似乎有一个错字(它几乎与 Dim
声明的文档复制并可能(?)相同):“当您在 [sic !] 一个过程..."
是否有弃用 global
以支持 public
的文档?以上是关于作为模块化字段访问修饰符的 Dim、Global、Public 和 Private 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章