今天学习VB.NET,发现VB.NET里面有一个Module的东西,以下图(图-1)所示:函数
图-1学习
上网查了一下VB.NET里面的Module,才发现这是学习VB.NET遇到的第一个典型的问题就是:为何VB.NET中会有一个Module的东西,而在C#等语言中是没有的呢?spa
首先,这是一个历史缘由。早先的VB语言都有模块和类模块的概念。所谓模块通常就是存放公用的一些方法(Sub)或者函数(Function),而类模块,至关于就是咱们常常所说的类的概念。 3d
模块(Module)里面能够直接有方法,这些方法自动就是静态的(或者称为共享的——VB.NET中的关键字是Shared),这些方法能够直接调用,因此Module是没法实例化,也没有必要实例化的。code
模块没法继承,也没法实现接口。blog
模块里面能够有类,但其实这个类并不须要真的经过模块做为前缀来引用。因此模块有点虚的概念继承
模块能够被组织到命名空间中去,由于模块实际上是个虚的,因此它的方法也能够直接外层的命名空间调用接口
Module代码范例:ci
1 '用命名空间封装Module 2 Namespace VBModuleTest 3 ''' <summary> 4 ''' 模块没法继承,没法实现接口 5 ''' </summary> 6 ''' <remarks></remarks> 7 Module ModuleTest 8 ''' <summary> 9 ''' 模块里面的方法都是静态的,无需实例化,也无从实例化 10 ''' </summary> 11 ''' <remarks></remarks> 12 Sub Main() 13 'new一个Class1实例 14 'Dim clazz As Class1 = New Class1这样也是对的 15 Dim clazz As Class1 = New Class1() 16 clazz.Name = "Class1类" 17 Console.WriteLine(clazz.Name) 18 Console.WriteLine(clazz.GetClassName()) 19 Console.ReadKey() 20 End Sub 21 ''' <summary> 22 ''' 有返回值的方法,用Function来声明 23 ''' </summary> 24 ''' <returns></returns> 25 ''' <remarks></remarks> 26 Public Function Test1() As String 27 Console.WriteLine("这个是Module里面的Test1方法") 28 Return "" 29 End Function 30 ''' <summary> 31 ''' 无返回值的方法,用Sub来声明 32 ''' </summary> 33 ''' <remarks></remarks> 34 Public Sub Test2() 35 Console.WriteLine("这个是Module里面的Test2方法") 36 End Sub 37 38 ''' <summary> 39 ''' 类型能够放在模块里面,但主要的现实意义在于分类存放而已,放在模块里面并不影响该类型对外的引用。 40 ''' 例如咱们并不必定须要用VBModuleTest.ModuleTest.Class1, 41 ''' 而是直接经过VBModuleTest.Class1就能够对其进行引用 42 ''' </summary> 43 ''' <remarks></remarks> 44 Public Class Class1 : Implements IComparable 45 ''' <summary> 46 ''' 声明属性 47 ''' </summary> 48 ''' <remarks></remarks> 49 Private _name As String 50 Public Property Name() As String 51 Get 52 Return _name 53 End Get 54 Set(ByVal value As String) 55 Me._name = value 56 End Set 57 End Property 58 59 ''' <summary> 60 ''' 声明方法 61 ''' </summary> 62 ''' <returns></returns> 63 ''' <remarks></remarks> 64 Public Function GetClassName() As String 65 Test1() 66 ModuleTest.Test2() 67 Return Me.GetType().ToString() 68 End Function 69 70 ''' <summary> 71 ''' 实现接口中的方法 72 ''' </summary> 73 ''' <param name="obj"></param> 74 ''' <returns></returns> 75 ''' <remarks></remarks> 76 Public Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo 77 Return 1 78 End Function 79 End Class 80 End Module 81 End Namespace
这里的代码只是纯粹为演示目的而写的,没有任何具体意义 。rem