今天學習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