VB.NET中Module的概念

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

相關文章
相關標籤/搜索