🕰 小故事:VB 的 Handles vs. ASP.NET 的 OnClick

| Visual Basic | 2 Reads

VB.NET 的「老習慣」

VB6 時代(還沒有 .NET 的時候),事件都是用「關鍵字 Handles」來掛的。
比如:

Private Sub Command1_Click()
    MsgBox "Hello"
End Sub

VB 編譯器會自動知道 Command1 這個按鈕要把 Click 掛上這個方法。
到了 VB.NET 時,微軟爲了讓 VB 開發者「平滑過渡」,保留了 Handles 的寫法。
所以 VB.NET 仍然允許:

Protected Sub btnBack_Click(...) Handles btnBack.Click

👉 這樣 VB 老程式員會覺得「親切」,不需要學新寫法。


ASP.NET WebForms 的「標準做法」

C# 裏沒有 Handles

那怎麼綁事件呢? → 靠 aspx 裏的 OnClick 屬性

<asp:Button ID="btnBack" runat="server" OnClick="btnBack_Click" />

這會在頁面生命週期中,把事件對應到後台代碼。

ASP.NET 是跨語言的(C# / VB.NET / J# 當年都能寫),所以它需要一個「語言無關」的方式 —— 就是 OnClick


為什麼會有兩種?

  • VB 陣營:繼承 VB6 傳統,喜歡寫 Handles

  • C# 陣營:只認 OnClick,因為 C# 語法沒有 Handles

結果 ASP.NET 就出現了「兩條路都能走」的情況。

  • VB 程式員可以不用在 aspx 裏寫 OnClick,只靠 Handles

  • C# 程式員只能靠 aspx 的 OnClick


📝 總結成一個小趣味

  • VB:我有 Handles,代碼看起來自動、簡短,保持 VB 傳統。

  • C#:我沒有 Handles,只能靠 aspx 的 OnClick

  • ASP.NET:行吧,你們愛用哪個都行,最後都是調用 AddHandler

所以這算是一個「語言歷史兼容」的小故事,特別反映了當年微軟爲了照顧 VB 程式員的「情懷」。

This article was last edited at