【问题标题】:What is the difference between Dim, Global, Public, and Private as Modular Field Access Modifiers?作为模块化字段访问修饰符的 Dim、Global、Public 和 Private 有什么区别?
【发布时间】:2021-11-23 02:05:36
【问题描述】:

在 VB6/VBA 中,您可以在特定的 SubFunction 方法之外声明模块级变量。我在内部模块之前使用过PrivatePublic,并像这样理解它们:

  • Public - 对模块内的所有代码和模块外的所有代码可见,本质上使其成为全局代码。
  • Private - 仅对模块内的代码可见。

我注意到您可以使用DimGlobal 作为模块化变量的修饰符。 DimGlobal 分别与 PrivatePublic 在模块化字段上用作访问修饰符时不同吗?如果有,它们有何不同?

【问题讨论】:

    标签: vba vb6 scope access-modifiers


    【解决方案1】:

    DimPrivate 的工作方式相同,但常见的约定是在模块级别使用Private,在子/函数级别使用DimPublicGlobal 在功能上几乎相同,但是 Global 只能用于标准模块,而 Public 可以用于所有上下文(模块、类、控件、表单等)Global来自旧版本的 VB,可能为了向后兼容而保留,但已被 Public 完全取代。

    【讨论】:

    • 感谢您的回答。你的解释和我一直在想的差不多。我从一大块遗留代码开始,这些代码在单个模块的声明部分中使用了所有四个修饰符。
    • 全局变量在执行后保持其值。
    • 将您的 cmets 与 Excel 2010 的在线帮助进行比较揭示了几个非常好的点:“使用 Public 语句声明的变量可用于所有应用程序的所有模块中的所有过程,除非选项私有模块位于效果;在这种情况下,变量仅在它们所在的项目内是公共的。此外,请注意:类模块中不能使用 Public 语句来声明固定长度的字符串变量。因为以上两者都是晦涩的用例,两者都不太可能成为实际问题。不过,为了完整性。
    • 虽然问题只涉及模块级声明,但为了完整起见(对于新手而言),值得明确指出的是,PrivatePublic 甚至不允许在过程中使用。 Private 声明的 official documentation 在这方面似乎有一个错字(它几乎与 Dim 声明的文档复制并可能(?)相同):“当您在 [sic !] 一个过程..."
    • 是否有弃用 global 以支持 public 的文档?
    猜你喜欢
    • 2010-10-11
    • 1970-01-01
    • 2017-06-04
    • 2015-11-26
    • 2011-01-15
    • 2018-04-28
    • 2014-11-03
    相关资源
    最近更新 更多