VB.NET Module 筆記(基礎篇)
Module 是 VB.NET 中用來集中放置共用成員的結構。它不需要先建立物件,就能直接呼叫其中的函式、程序、常數或屬性,因此常用來放置工具方法、固定規則、格式化函式與擴充方法。
Module 的重點不是把程式碼集中丟到同一個地方,而是放置「不依附某個物件狀態」的共用邏輯。若功能需要保存每個物件自己的資料,或需要建立多個不同實例,就應優先考慮使用 Class。
Module 是 VB.NET 中用來集中放置共用成員的結構。它不需要先建立物件,就能直接呼叫其中的函式、程序、常數或屬性,因此常用來放置工具方法、固定規則、格式化函式與擴充方法。
Module 的重點不是把程式碼集中丟到同一個地方,而是放置「不依附某個物件狀態」的共用邏輯。若功能需要保存每個物件自己的資料,或需要建立多個不同實例,就應優先考慮使用 Class。
Boolean 是用來表示邏輯結果的型別,只有 True 與 False 兩種值。只要需求是在判斷是否成立、是否允許、是否勾選、是否完成,就常會用到布林值。
Boolean 的重點不是只會存放 True 或 False,而是讓條件流程變清楚。好的布林變數名稱會像一句判斷問題,例如 isReady、canSubmit、hasPermission,閱讀時就能直接看懂判斷意義。
資料類型用來決定變數可以保存什麼資料,也決定資料能做什麼運算。數量適合用整數,金額適合用 Decimal,日期應使用 Date,文字則依照單一字元或整段內容選擇 Char 或 String。
型別不是單純語法名稱,而是資料設計的第一步。型別選得清楚,後續的輸入檢查、計算、格式化與維護都會更穩定。這篇以 Windows Forms 範例整理 Boolean、Integer、Decimal、String、Char 與 Date 的使用方式。
Enum 用來表示一組固定選項。比起在程式中到處使用數字或字串,列舉可以用清楚的名稱代表狀態、類型、等級或選項,讓程式更容易閱讀,也比較不容易把不相關的值混在一起。
列舉適合用在「選項固定、名稱有意義、程式會反覆判斷」的情境。這篇以 Windows Forms 範例說明基本宣告、指定數值、Select Case、ComboBox、文字轉列舉與 <Flags> 組合列舉。
在 Windows Forms 中,畫面控制項屬於建立它們的 UI 執行緒。背景執行緒若直接修改 Label、ProgressBar、ListBox 或 Button,容易發生跨執行緒存取錯誤。
Invoke、BeginInvoke 與 InvokeRequired 的重點,是把背景執行緒中的 UI 更新動作,安全送回控制項所屬的 UI 執行緒。這篇會從「為什麼需要切回 UI 執行緒」開始,再用 Windows Forms 範例整理同步更新、非同步排入、共用更新方法與表單關閉時的安全處理。
Constructor 是物件建立時自動執行的初始化程序。在 VB.NET 中,建構式寫成 Sub New。它不只是用來填預設值,更重要的是讓物件一建立就符合必要規則,避免產生半完成、資料不完整或狀態不合理的物件。
建構式進階篇的重點,是理解不同初始化方式如何安排:何時使用必要參數、何時使用重載、何時用 Optional、何時讓建構式呼叫另一個建構式,以及繼承時為什麼要先呼叫 MyBase.New。
Stack(Of T) 是用來保存資料的一種集合,特色是「最後放入的資料,會最先被取出」。這種順序稱為 LIFO,也就是 Last In, First Out。
堆疊適合處理需要「回到最近一步」、「先處理最上層」、「暫存一連串待還原動作」的流程。理解 Stack 時,重點不是背方法名稱,而是看懂資料從哪裡進、從哪裡出,以及為什麼只能優先操作頂端資料。
Object 是依照類別建立出來的實際資料實體。類別負責定義規格,物件則真正保存資料並執行方法。程式在執行期間操作的,通常不是抽象的類別,而是一個一個已建立的物件。
理解物件時,重點是看見「每個物件都有自己的狀態」。相同類別可以建立多個物件,但每個物件保存的資料可以不同;方法執行時,也會依照該物件目前的狀態得到不同結果。