1. 概念
为什么会有模块的概念?
在VB中有模块和类模块的概念,所谓模块就是存放公用的一些方法(Sub)或者(Function);而类模块,相当于我们经常说的类的概念。所以在VB.NET中也就有了Module的概念,它是继承下来的。但是在VB.NET里面Module有一些新的功能。
1. 模块(Module)的方法特点:这些方法自动就是静态的(或者称为共享的——VB.NET中的关键字是Shared),这些方法可以直接调用,所以Module是无法实例化,也没有必要实例化的。
2. 模块无法继承,也无法实现接口
3. 每个模块均正好有一个实例,并且无需创建此实例或将其赋给变量。模块不支持继承,也不实现接口。请注意,从类或结构是类型这一意义上说,模块并非类型 - 您无法将编程元素声明为具有模块的数据类型。
4. 在命名空间级别使用 Module。这意味着模块的声明上下文必须是源文件或命名空间,而不能是类、结构、模块、接口、过程或块。无法在一个模块或任何类型中嵌套另一个模块。
2. 和Class的区别
1. 术语。以前的 Visual Basic 版本识别两种类型的模块:类模块(.cls 文件)和标准模块(.bas 文件)。当前版本会分别调用这些类和模块。
2. 共享成员。可以控制类的成员是共享成员还是实例成员。
3. 面向对象。类是面向对象的,但模块不是。因此,只能将类实例化为对象。
3. 使用示例
模块的使用了类的使用区别其实不大,可以理解为一个不能够实例化的静态类,在里面我们可以定义一些全局变量和函数。在模块中定义全局变量,入口函数Main和其他共享或私有函数和方法,引用模块中定义的变量,函数和方法不需要进行New实例化。
Public Module thisModule Sub Main() Dim userName As String = InputBox("What is your name?") MsgBox("User name is" & userName) End Sub ' Insert variable,property,procedure,and event declarations. End Module
在Module中创建了一些全局变量和函数,调用这些变量和方法的时候不用New。
Imports System Imports System.IO Public Module MyModule '定义全局变量 '登陆的用户名和密码 Public LoginID As String Public LoginPwd As String Public Sub AddOne(ByVal n As Integer) '这里是函数AddOne的定义 Console.WriteLine(n + 1) End Sub '函数是有返回值的。我们写一个函数,传入一个整数,函数返回这个数的加二。例如给它3,它返回5。 Public Function AddTwo(ByVal n As Integer) As Integer Return n + 2 'return后面的表达式就是这个函数要返回的东西 End Function End Module