針對 VS.NET 2003 兩大主流語言,整理**有意義的功能差異**。* 標記者:對方語言雖無直接語法,但可在 IL 層面實現相同功能。不列傳統迴圈/分支、VB 相容舊語法(On Error、Option Explicit 等)。
| VB.NET 獨有 | C# 獨有 |
|---|---|
區域 Static 變數 * | 運算子多載 |
WithEvents / Handles 事件語法 * | 為 event 指定 add/remove 存取器 |
| 選擇性參數 | using 陳述式 * |
| 依名稱傳遞引數 | XML 文件註解 |
| 屬性參數 | Unsafe 程式碼與指標 |
| 以非虛擬方式呼叫虛擬函式 | as / is 運算子 * |
| 重新命名實作介面 | 匿名方法 (C# 2.0+) |
| 晚期繫結 | 迭代器 (yield return) |
With 陳述式 * | 部分類型 (partial class) |
Imports 匯入靜態成員 | 可為 null 的實值型別 (int?) |
| 模組 | 靜態類別 (static class) |
Try...Catch...When 篩選 | 預設介面方法 (C# 8.0+) |
| VB 執行階段函式庫 |
' VB.NET
Private WithEvents btn As Button
Private Sub btn_Click(...) Handles btn.Click ... End Sub
// C#
btn.Click += Btn_Click;
btn.Click -= Btn_Click;
VB 編譯器自動處理訂閱/取消訂閱,C# 需手動管理,但 C# 更靈活(可動態增減、Lambda)。
' VB.NET
Sub Foo(Optional x As Int32 = 0) ... End Sub
// C# 4.0 前無直接語法,需多載或用 DefaultParameterValueAttribute
void Foo(int x = 0) ... // C# 4.0+
C# 支援 operator + 等,VB.NET 需定義共用 Operator 函式(語法較冗長)。
C# 原生 /// 產出 XML 文件,VB.NET 需手寫或用外掛工具。
C# 允許 unsafe 區塊直接操作記憶體,VB.NET 完全禁止(需 P/Invoke)。
WithEvents、選擇性參數提升產能語言是工具,沒有絕對優劣。理解差異、發揮各自優勢、避開陷阱,才是專業開發者的態度。