模块(Module)在 Visual Basic 中历史上用于存储在整个项目中可用的过程、函数和变量,无需显式创建实例。随着类的引入,它们的角色部分重叠,但仍然保留了显著的区别。
背景资料:
在经典的 Visual Basic(VB6)中,模块是分组公共函数和全局变量的唯一方法。在 VB.NET 中,模块仍然存在,但具有扩展的类功能。
问题:
开发者可能不理解模块与类之间的区别,这导致选择存储逻辑的方式错误、意外的代码重复或变量的意外行为。
解决方案:
选择模块与类取决于目标:
代码示例:
' 模块 Module MathUtils Public Function Add(x As Integer, y As Integer) As Integer Return x + y End Function End Module ' 使用 Dim result = MathUtils.Add(5, 10)
关键特点:
Shared,可在没有实例的情况下访问如果在模块中声明一个变量为 Public,它会对应用程序的所有窗体/类通用吗?
是的。Public 变量在模块中实质上是全局的。它们可以从项目的任何代码访问,虽然方便,但在多线程或意外覆盖值时可能导致错误。
可以使用 New 创建模块的实例吗?
不能。模块无法实例化。它们的所有功能都是静态可用的。
可以继承模块或声明具有 Protected 或 Private 访问修饰符的模块吗?
不可以。模块不能被继承,只能在命名空间(namespace)级别声明,不能嵌套,也不能具有 Public 或 Friend 以外的其他访问修饰符。
在项目中,所有用户状态变量都在模块中声明为 Public。任何窗口中值的更改都立即为所有其他窗口所共享。
优点:
缺点:
模块仅用于存储辅助工具(例如,转换函数),而用户状态存储在封装类中。
优点:
缺点: