今天學習VB.NET,發現VB.NET里面有一個Module的東西,如下圖(圖-1)所示:
圖-1
上網查了一下VB.NET里面的Module,才發現這是學習VB.NET遇到的第一個典型的問題就是:為什么VB.NET中會有一個Module的東西,而在C#等語言中是沒有的呢?
首先,這是一個歷史原因。早先的VB語言都有模塊和類模塊的概念。所謂模塊一般就是存放公用的一些方法(Sub)或者函數(Function),而類模塊,相當於就是我們經常所說的類的概念。
模塊(Module)里面可以直接有方法,這些方法自動就是靜態的(或者稱為共享的——VB.NET中的關鍵字是Shared),這些方法可以直接調用,所以Module是無法實例化,也沒有必要實例化的。
模塊無法繼承,也無法實現接口。
模塊里面可以有類,但其實這個類並不需要真的通過模塊作為前綴來引用。所以模塊有點虛的概念
模塊可以被組織到命名空間中去,因為模塊其實是個虛的,所以它的方法也可以直接外層的命名空間調用
Module代碼范例:
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
這里的代碼只是純粹為演示目的而寫的,沒有任何具體意義 。