Module Module1
Public aNew As String '全域公用成員變數,可以在當前項目的任何類和模組中引用
'Dim aNew As String '模組的成員變數(欄位)絕對不會出現形如:Public Dim aNew As String 的聲明
Sub Main()
Console.WriteLine("hello, word!")
aMethod()
Console.WriteLine(addTwoNumber(1, 9))
textInputBoxAndMsgBox()
Dim TestWu As New SubNewClass()
Console.WriteLine(TestWu.testSubNew)
Dim TestYou As New SubNewClass("調用有參數構造器")
Console.WriteLine(TestYou.testCanShuSubNew)
Console.ReadKey()
End Sub
'Protected Sub aMethod() '錯誤
'Shared Sub aMethod() '錯誤
Private Sub aMethod()
Console.WriteLine("aMethod")
End Sub
Sub New() '建構函式
aNew = "用建構函式初始化aNew成員變數(欄位)"
Console.WriteLine(aNew)
End Sub
'Private Function addTwoNumber(ByVal a, ByVal b) As Integer '如果在模組的開始加上了Option Strict On ,則會產生錯誤,錯誤提示為: Option Strict On 要求所有變數聲明都有“As”子句,如果在模組的開始加上了Option Strict Off或者什麼都不加, 則可以通過。
Public Function addTwoNumber(ByVal a As Integer, ByVal b As Integer) As Integer '和過程一樣,同樣不能用Protected和Private修飾函數
'Return a + b '與下面等價
addTwoNumber = a + b '與上面等價,這個是VB6傳回值的文法,直接讓函數名等於傳回值
End Function
Sub textInputBoxAndMsgBox() '測試InputBox和MsgBox函數
Dim userName As String
userName = InputBox("請輸入一個名字:", "測試InputBox和MsgBox")
MsgBox(userName, , "測試InputBox和MsgBox")
End Sub
End Module
Class SubNewClass
Private _testSubNew As String = "調用預設建構函式(即無參數建構函式)" '為配合屬性定義的
Public testCanShuSubNew As String '一個公用欄位,可以在該類外面被訪問
Sub New() '無參數構造器
End Sub
Sub New(ByVal X As String) '有參數構造器
Me.testCanShuSubNew = X
End Sub
Public Property testSubNew() As String '定義一個屬性
Get
Return _testSubNew
End Get
Set(ByVal value As String)
_testSubNew = value
End Set
End Property
End Class
'VB中的過程包裹子過程(Sub)和函數過程(Function),其實完全可以把過程稱為方法或者函數
'過程和函數都可以接受參數
'過程(又稱子過程)不能有傳回值
'函數(又稱函數過程)可以有傳回值,而且傳回值加在函式宣告的後面,用As實現
'VB中的類預設提供一個無參數構造器,所以你不必在代碼裡顯示定義一個無參數構造器就可以用無參數構造器執行個體化該類。但一旦在類中定義了一個有參數構造器,你就必須顯示定義一個
'無參數構造器,才能用無參數構造器執行個體化該類
'模組可以有建構函式,該建構函式在Main函數中會最先被執行
'模組不能執行個體化 模組不可繼承 模組被隱式的共用(內部成員都是Shared類型,相當與C#中的static)
'模組的成員不用提供Module名稱就可以被訪問。既你可以直接用成員的名字訪問該成員
'模組的成員是全域共用的,你可以在程式的任意位置訪問這些成員
'帶有Mani()方法的模組可被編譯成EXE檔案,而不需要提供任何額外的資訊指定應用程式的進入點
'模組可以有Main()函數也可以沒有Main()函數
'通過模組的全域成員變數,我們可以實現B/S結構裡面的Session,來判斷使用者的登陸狀態,這個我已經在一個項目實現
'後記:因為以前有過VB6的開發經驗,我覺得VB.NET中的模組是為了最大限度的相容VB6而保留的,不過就模組式編程來說,我還是比較喜歡,C#中沒有模組的實現,而VB.NET滿足了的體驗