在VB的模块中定义GLOBAL变量和PUBLIC变量有什么不同。

解决方案 »

  1.   

    vb6中好像没什么区别
    一直喜欢用PUBLIC
      

  2.   

    全局变量
    建议
    避免在组件中使用全局变量。在 Visual Basic 术语中,这表示在标准的 .BAS 模块中没有 Public 或 Global 变量。
    为什么
    Global 变量并不是真正意义上的全局。每个线程都有自己的副本。如果几种方法恰好在同一线程中执行,它们将看到相同的变量;否则它们访问的是这些变量的不同副本。这意味着您可能给一个全局变量赋了值(在线程 A 中),但其另一个用户(在线程 B 中执行)看不到新值。
    其原因是 Visual Basic 内部使用“线程本地存储 (TLS)”来引用全局变量。这意味着每个线程都有自己的 Public 变量的副本,并且因为它存在多个副本,全局数据并不是真正“全局的”。也就是说,恰好在同一线程中运行的用户才会访问到同一个变量,不论他们是否期望如此。
    常见的陷阱
    如果在标准 .BAS 模块中使用 Public 变量,当不同线程向还想使用同一个数据的不同用户请求提供服务时,这个数据可能已被破坏了。
    我能找到的只有这些...